មុខងារសំខាន់ៗ និងការផ្លាស់ប្តូរធំៗដែលត្រូវស្គាល់ថ្មីក្នុង PHP 8.6

0 Comments

កំណែថ្មីនេះបាននាំមកនូវមុខងារថ្មីៗដ៏មានអានុភាពជាច្រើន ដែលជួយបង្កើនប្រសិទ្ធភាពក្នុងការសរសេរកូដ ភាពបត់បែន និងសុវត្ថិភាពខ្ពស់ជាងមុន។ តោះ! មកដឹងពីមុខងារសំខាន់ៗទាំងអស់គ្នានៅក្នុងអត្ថបទនេះ៖

១. Partial Function Application (PFA) មុខងារ Partial Function Application គឺជាការបន្ថែមដ៏រំភើបមួយ ដែលអនុញ្ញាតឱ្យអ្នកហៅមុខងារណាមួយដោយបំពេញតម្លៃអាគុយម៉ង់ (Arguments) ទុកជាមុនមួយចំនួន ហើយទទួលបានមកវិញនូវ Closure សម្រាប់យកទៅប្រើប្រាស់បន្ត។ វាប្រើប្រាស់សញ្ញា ? ជា Placeholder សម្រាប់អាគុយម៉ង់ដែលត្រូវបំពេញពេលក្រោយ និង ... សម្រាប់អាគុយម៉ង់ដែលនៅសល់៖

$makeSlug = str_replace(' ', '-', ?); $makeSlug('Hello World'); // លទ្ធផល: Hello-World $titles = array_map(strtolower(?), $titles);

Closure ដែលទទួលបាននឹងរក្សាទុកឈ្មោះ Parameter ប្រភេទ និងតម្លៃដើមរបស់មុខងារដើមដដែល ដែលធ្វើឱ្យការសរសេរកូដកាន់តែមានភាពស៊ីវិល័យ។

២. អនុគមន៍ clamp() ថ្មី កន្លងមកដើម្បីកំណត់តម្លៃឱ្យស្ថិតក្នុងចន្លោះអប្បបរមា និងអតិបរមា យើងมัก ត្រូវប្រើប្រាស់កូដបង្គុំគ្នាស្មុគស្មាញដូចជា min(max($value, $min), $max)។ ឥឡូវនេះ PHP 8.6 បានបន្ថែមអនុគមន៍ clamp() ជាផ្លូវការ ដែលធ្វើឱ្យកិច្ចការនេះកាន់តែងាយស្រួល៖

clamp(10, min: 0, max: 100); // លទ្ធផល: 10 clamp(101, min: 0, max: 100); // លទ្ធផល: 100 (កាត់កងយកតម្លៃ Max) clamp(-1, min: 0, max: 100); // លទ្ធផល: 0 (កាត់កងយកតម្លៃ Min)

អនុគមន៍នេះអាចប្រើបានជាមួយគ្រប់ប្រភេទ Comparable Types ទាំងអស់ រួមទាំង String និងវត្ថុ DateTime ផងដែរ។

៣. ការបន្ថែមថ្នាក់ Time\Duration សម្រាប់អ្នកដែលត្រូវការគណនាពេលវេលា ឬបង្កើតប្រព័ន្ធកំណត់ម៉ោង (Stopwatch-style) PHP 8.6 បានបន្ថែម Time\Duration ដែលជា final readonly class មានភាពជាក់លាក់ខ្ពស់ដល់កម្រិតណាណូសេកុង (Nanosecond precision)។ វាគាំទ្រដល់ Factory methods សម្រាប់គ្រប់ខ្នាតពេលវេលា ព្រមទាំងមានមុខងារគណនាបូកដក និងប្រៀបធៀបស្រាប់៖

use Time\Duration; $oneSecond = Duration::fromSeconds(1); $halfSecond = $oneSecond->divideBy(2); $total = $oneSecond->add($halfSecond);

៤. Readonly Property Defaults ចាប់ពីកំណែនេះតទៅ ទ្រព្យសម្បត្តិប្រភេទ readonly ត្រូវបានអនុញ្ញាតឱ្យមានតម្លៃដើម (Default value) បានហើយ ដែលកាលពីមុនវារាប់ជាកំហុស compile-time។ ការផ្លាស់ប្តូរនេះជួយសម្រួលយ៉ាងខ្លាំងដល់ការសរសេរកូដ Migration ឬ Interface properties៖

final readonly class CreateBooksTable implements Migration { public string $name = '2026_01_01_create_books_table'; }

៥. DocComments សម្រាប់ Function Parameters ឥឡូវនេះអ្នកអាចសរសេរ Comment (/** ... */) បញ្ជាក់ពីអត្ថន័យផ្ទាល់លើ Parameter នីមួយៗរបស់ Function បានដោយផ្ទាល់ ដោយមិនចាំបាច់សរសេរប្រមូលផ្តុំនៅខាងលើមុខងារម្តងទៀតទេ៖

function search( /** Terms to search for in the database / string $query, /* Maximum number of entries to return */ int $limit = 10, ): array { // ... }

តាមរយៈមុខងារនេះ IDE និង Static analyzers អាចអាន Comment ពី Parameter ផ្ទាល់បានយ៉ាងងាយស្រួលតាមរយៈ ReflectionParameter::getDocComment()។

៦. A Polling API (Io\Poll) namespace ថ្មី Io\Poll ត្រូវបានបង្កើតឡើងដើម្បីផ្តល់នូវចំណុចប្រទាក់ម៉ាស៊ីនតែមួយ (Unified interface) ក្នុងការគ្រប់គ្រងប្រព័ន្ធ polling របស់ OS នីមួយៗ (Epoll លើ Linux, Kqueue លើ macOS/BSD និង WSAPoll លើ Windows) ដែលជួយសម្រួលដល់ការបង្កើត Asynchronous runtimes ឬ event loops ក្នុង userland។

៧. SortDirection Enum ការបន្ថែម Global Enum ឈ្មោះថា SortDirection ដែលមានករណី Ascending និង Descending ស្រាប់ក្នុង Core ជួយកាត់បន្ថយការដែល லைบรារី (Libraries) នីមួយៗត្រូវបង្កើត Enum ផ្ទាល់ខ្លួនដដែលៗ ឧទាហរណ៍ដូចជាក្នុង Query builders៖

$query->orderBy('created_at', SortDirection::Descending);

៨. Enums អាចប្រើប្រាស់ __debugInfo() បាន ការកំណត់សិទ្ធិថ្មីអនុញ្ញាតឱ្យ Enums អាចកំណត់កូដក្នុងហ្វังก์ชันវេទមន្ត __debugInfo() បានហើយ ដោយសារវាត្រូវការ state តិចតួច ដែលធ្វើឱ្យយើងអាចកែច្នៃទម្រង់បង្ហាញលទ្ធផលពេលប្រើ var_dump() បានតាមតម្រូវការ។

៩. ប្រព័ន្ធគ្រប់គ្រងកំហុសស្ទ្រីម (Stream Error Handling) ស្ទ្រីមឥឡូវនេះមានគំរូកំហុសដែលប្រសើរជាងមុន តាមរយៈ Option error_mode ក្នុង context ជាមួយកូដកំហុសស្ដង់ដារជាង 50 ក្នុង StreamErrorCode enum និងមុខងារ stream_last_errors() ដើម្បីទាញយកstructured errors មកវិភាគ។

១០. ការអភិវឌ្ឍន៍បន្ថែមលើ URI Extension URI extension ដែលទើបទទួលបានកាលពី PHP 8.5 ឥឡូវនេះត្រូវបានបំពាក់បន្ថែមនូវ Builder classes ព្រមទាំងមុខងារ getUriType(), getHostType() និងមុខងារ percent-encoding សម្រាប់គ្រប់គ្រងសមាសភាគ URI នីមួយៗដោយមិនចាំបាច់បង្កើត Object ច្រើនដង។

១១. ការកំណត់ Session Defaults ប្រកបដោយសុវត្ថិភាពខ្ពស់ សម្រាប់កាដំឡើងថ្មី (New installations) ការកំណត់ក្នុង php.ini ត្រូវបានប្តូរដើម្បីធានាសុវត្ថិភាពជាងមុន៖

session.use_strict_mode: ប្ដូរពី 0 ទៅ 1

session.cookie_httponly: ប្ដូរពី 0 ទៅ 1

session.cookie_samesite: ប្ដូរពី unset ទៅ Lax

(ចំណាំ៖ សម្រាប់ Framework ដូចជា Laravel ដែលគ្រប់គ្រង Session និង Cookies ដោយខ្លួនឯង គឺមិនមានការប៉ះពាល់អ្វីឡើយ ប៉ុន្តែកម្មវិធីដែលប្រើប្រាស់ Native PHP sessions ផ្ទាល់គួរតែធ្វើការផ្ទៀងផ្ទាត់លើការផ្លាស់ប្តូរទាំងនេះ។)

សេចក្តីសន្និដ្ឋាន PHP 8.6 គឺជាជំហានវិវត្តន៍ដ៏មានសារៈសំខាន់មួយទៀត ដែលមិនត្រឹមតែជួយឱ្យកូដមានភាពស្អាត សង្ខេប និងងាយស្រួលអានប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងបង្កើនសមត្ថភាពផ្នែក System-level និងសុវត្ថិភាពទិន្នន័យថែមទៀតផង។ ត្រៀមខ្លួនរួចជាស្រេចដើម្បីស្វាគមន៍ការមកដល់ជាផ្លូវការនៅខែវិច្ឆិកា ឆ្នាំ ២០២៦ នេះ!

ប្រភពអត្ថបទ ៖ https://laravel-news.com/php-8-6