Cộng đồng PHP đang vô cùng hào hứng đón chờ sự ra mắt của phiên bản lớn tiếp theo: PHP 8.5. Phiên bản này không chỉ tiếp tục mang đến những cải thiện về hiệu suất mà còn giới thiệu hàng loạt các tính năng mới, từ những bổ sung nhỏ nhưng tiện lợi cho đến những thay đổi sâu sắc hơn trong thư viện cốt lõi. Bài viết này sẽ cung cấp cho bạn cái nhìn tổng quan về ngày phát hành dự kiến và đi sâu vào khám phá những tính năng mới đáng chú ý nhất của PHP 8.5.
1. Ngày phát hành dự kiến của PHP 8.5
Theo lộ trình phát triển đã được công bố, PHP 8.5 dự kiến sẽ chính thức ra mắt vào ngày 20 tháng 11 năm 2025. Đây là một cột mốc quan trọng, đánh dấu bước tiến mới trong sự phát triển không ngừng của ngôn ngữ lập trình web phổ biến này. Hãy cùng chờ đợi những cải tiến và tiện ích mà PHP 8.5 mang lại.
2. Khám phá những tính năng mới nổi bật trong PHP 8.5
PHP 8.5 mang đến một loạt các tính năng mới, tập trung vào việc nâng cao hiệu suất, cải thiện trải nghiệm phát triển và mở rộng khả năng của ngôn ngữ. Dưới đây là chi tiết về những tính năng mới mà bạn đã đề cập:
2.1. curl_multi_get_handles(): Lấy danh sách các cURL handle trong multi handle
Trong PHP, thư viện cURL cho phép thực hiện các yêu cầu HTTP và các giao thức mạng khác. Hàm curl_multi_* cung cấp khả năng thực hiện nhiều yêu cầu cURL song song. PHP 8.5 giới thiệu hàm curl_multi_get_handles(), cho phép bạn lấy danh sách tất cả các cURL handle hiện đang được quản lý bởi một cURL multi handle.
Trước đây, việc theo dõi các cURL handle trong một multi handle có thể phức tạp. Hàm mới này cung cấp một cách trực quan và dễ dàng để truy cập và quản lý các handle này, giúp việc giám sát và điều khiển các tiến trình cURL đồng thời trở nên thuận tiện hơn.
Ví dụ:
<?php
$mh = curl_multi_init();
$handles = [];
$handles[] = curl_init("https://example.com/api/resource1");
$handles[] = curl_init("https://example.org/api/resource2");
foreach ($handles as $ch) {
curl_multi_add_handle($mh, $ch);
}
// Thực hiện các yêu cầu đồng thời
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// Lấy danh sách các handle
$currentHandles = curl_multi_get_handles($mh);
print_r($currentHandles);
// Đóng các handle và multi handle
foreach ($handles as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
?>
2.2. Hằng số PHP_BUILD_DATE mới
PHP 8.5 giới thiệu một hằng số mới có tên là PHP_BUILD_DATE. Hằng số này chứa thông tin về ngày và giờ mà phiên bản PHP hiện tại được build.
Hằng số này cung cấp một cách dễ dàng để xác định thời điểm chính xác mà bản PHP đang chạy được biên dịch. Điều này có thể hữu ích trong việc theo dõi, gỡ lỗi và đảm bảo tính nhất quán trong môi trường triển khai.
Ví dụ:
<?php
echo "Phiên bản PHP: " . PHP_VERSION . "\n";
echo "Ngày build PHP: " . PHP_BUILD_DATE . "\n";
?>
2.3. Hàm get_exception_handler() và get_error_handler() mới
PHP 8.5 bổ sung hai hàm mới: get_exception_handler() và get_error_handler(). Các hàm này cho phép bạn lấy về các handler hiện tại đã được thiết lập cho việc xử lý exception và error bằng cách sử dụng set_exception_handler() và set_error_handler().
Trước đây, không có cách trực tiếp để lấy lại các handler đã được thiết lập. Các hàm mới này giúp bạn kiểm tra hoặc khôi phục các handler trước đó nếu cần thiết, mang lại sự linh hoạt hơn trong việc quản lý quy trình xử lý lỗi và ngoại lệ của ứng dụng.
Ví dụ:
<?php
function customExceptionHandler($exception) {
echo "Đã xảy ra ngoại lệ: " . $exception->getMessage() . "\n";
}
function customErrorHandler($errno, $errstr, $errfile, $errline) {
echo "Lỗi [$errno] $errstr tại $errfile:$errline\n";
return true; // Ngăn chặn trình xử lý lỗi PHP mặc định
}
// Thiết lập các handler tùy chỉnh
set_exception_handler('customExceptionHandler');
set_error_handler('customErrorHandler');
// Lấy về các handler đã thiết lập
$currentExceptionHandler = get_exception_handler();
$currentErrorHandler = get_error_handler();
echo "Trình xử lý ngoại lệ hiện tại: ";
var_dump($currentExceptionHandler);
echo "Trình xử lý lỗi hiện tại: ";
var_dump($currentErrorHandler);
// Gây ra lỗi và ngoại lệ để kiểm tra
trigger_error("Đây là một lỗi thử nghiệm.", E_USER_WARNING);
throw new Exception("Đây là một ngoại lệ thử nghiệm.");
?>
2.4. Hỗ trợ Stack Trace cho lỗi Fatal Error
Một cải tiến đáng giá trong PHP 8.5 là việc bổ sung hỗ trợ stack trace cho các lỗi Fatal Error.
Lỗi Fatal Error thường khiến script PHP dừng lại ngay lập tức mà không cung cấp nhiều thông tin gỡ lỗi. Với sự thay đổi này, khi một Fatal Error xảy ra, PHP sẽ cung cấp một stack trace chi tiết, giúp nhà phát triển xác định chính xác vị trí và chuỗi các lời gọi hàm dẫn đến lỗi, từ đó quá trình gỡ lỗi trở nên dễ dàng và nhanh chóng hơn.
Ví dụ: (Ví dụ này minh họa thông tin stack trace sẽ được hiển thị khi xảy ra Fatal Error)
<?php
function functionA() {
functionB();
}
function functionB() {
undefinedFunction(); // Gây ra Fatal Error: Call to undefined function undefinedFunction()
}
functionA();
?>
Trong PHP 8.5, khi đoạn code trên chạy, bạn sẽ nhận được một thông báo lỗi Fatal Error kèm theo stack trace chỉ ra rằng lỗi xảy ra trong functionB(), được gọi từ functionA().
2.5. Hàm locale_is_right_to_left() và phương thức Locale::isRightToLeft() mới
PHP 8.5 giới thiệu hàm locale_is_right_to_left() và phương thức tĩnh Locale::isRightToLeft() trong lớp Locale của extension Internationalization (intl). Cả hai đều được sử dụng để kiểm tra xem một locale (ví dụ: 'ar' cho tiếng Ả Rập) có phải là ngôn ngữ viết từ phải sang trái (RTL) hay không.
Tính năng này giúp các nhà phát triển dễ dàng xác định hướng viết của một ngôn ngữ cụ thể, rất hữu ích trong việc xây dựng các ứng dụng đa ngôn ngữ hỗ trợ các ngôn ngữ RTL như tiếng Ả Rập, tiếng Hebrew, v.v.
Ví dụ:
<?php
if (extension_loaded('intl')) {
$arabicLocale = 'ar';
$englishLocale = 'en';
if (locale_is_right_to_left($arabicLocale)) {
echo "$arabicLocale là ngôn ngữ viết từ phải sang trái.\n";
} else {
echo "$arabicLocale không phải là ngôn ngữ viết từ phải sang trái.\n";
}
if (Locale::isRightToLeft($englishLocale)) {
echo "$englishLocale là ngôn ngữ viết từ phải sang trái.\n";
} else {
echo "$englishLocale không phải là ngôn ngữ viết từ phải sang trái.\n";
}
} else {
echo "Extension intl chưa được cài đặt.\n";
}
?>
2.6. Hàm array_first() và array_last() mới
PHP 8.5 bổ sung hai hàm mới để làm việc với mảng: array_first() và array_last().
array_first(array $array): mixed: Trả về phần tử đầu tiên của mảng. Nếu mảng rỗng, nó trả vềnull.array_last(array $array): mixed: Trả về phần tử cuối cùng của mảng. Nếu mảng rỗng, nó trả vềnull.
Trước đây, để lấy phần tử đầu tiên hoặc cuối cùng của một mảng, bạn thường phải sử dụng các hàm như reset() và end(), đi kèm với việc kiểm tra con trỏ mảng. Hai hàm mới này cung cấp một cách trực quan và đơn giản hơn để thực hiện các thao tác phổ biến này.
Ví dụ:
<?php
$numbers = [1, 2, 3, 4, 5];
$first = array_first($numbers);
$last = array_last($numbers);
echo "Phần tử đầu tiên: " . $first . "\n"; // Kết quả: 1
echo "Phần tử cuối cùng: " . $last . "\n"; // Kết quả: 5
$emptyArray = [];
$firstEmpty = array_first($emptyArray);
$lastEmpty = array_last($emptyArray);
var_dump($firstEmpty); // Kết quả: null
var_dump($lastEmpty); // Kết quả: null
?>
2.7. CLI: php --ini=diff để xuất các chỉ thị INI không mặc định
Trong môi trường dòng lệnh (CLI), PHP 8.5 giới thiệu một tùy chọn mới cho lệnh php: --ini=diff. Khi được sử dụng, tùy chọn này sẽ xuất ra danh sách các chỉ thị INI (cấu hình PHP) mà có giá trị khác với giá trị mặc định của chúng.
Tính năng này đặc biệt hữu ích khi bạn muốn kiểm tra và xác định những thay đổi cấu hình PHP nào đang được áp dụng so với cấu hình mặc định. Điều này giúp đơn giản hóa việc gỡ lỗi và quản lý cấu hình trong các môi trường khác nhau.
Ví dụ:
Giả sử bạn có một file php.ini tùy chỉnh, khi chạy lệnh:
php --ini=diff
PHP sẽ xuất ra một danh sách các dòng trong file cấu hình của bạn mà có giá trị khác với giá trị mặc định. Ví dụ:
[memory_limit]
local_value=128M
master_value=128M
[error_reporting]
local_value=E_ALL & ~E_NOTICE
master_value=E_ALL & ~E_NOTICE3. Deprecations in PHP 8.5
Cùng với những tính năng mới, mỗi phiên bản PHP lớn cũng đi kèm với việc loại bỏ (deprecation) một số tính năng hoặc hàm cũ không còn được khuyến khích sử dụng. Việc này nhằm mục đích dọn dẹp mã nguồn, cải thiện tính nhất quán và hướng tới những giải pháp hiện đại hơn. PHP 8.5 tiếp tục xu hướng này với một số deprecation đáng chú ý, trong đó có việc loại bỏ các hằng số MHASH_*.
Loại bỏ các hằng số MHASH_*
Trong PHP, extension mhash cung cấp một giao diện để làm việc với nhiều thuật toán hash khác nhau. Tuy nhiên, extension này đã được đánh dấu là deprecated (không khuyến khích sử dụng) từ PHP 7.2 và cuối cùng đã bị loại bỏ hoàn toàn trong PHP 8.0.
Trong PHP 8.5, các hằng số liên quan đến mhash, bắt đầu bằng tiền tố MHASH_* (ví dụ: MHASH_MD5, MHASH_SHA1, v.v.), sẽ chính thức bị loại bỏ. Việc cố gắng sử dụng các hằng số này sẽ gây ra một thông báo deprecation warning trong mã của bạn.
Giải thích: Việc loại bỏ các hằng số MHASH_* là một bước đi hợp lý sau khi extension mhash đã bị loại bỏ hoàn toàn. PHP khuyến khích sử dụng extension hash mạnh mẽ và linh hoạt hơn, cung cấp nhiều thuật toán hash hiện đại và được bảo trì tốt hơn.
Ví dụ về deprecation warning:
<?php
// Đoạn mã này sẽ gây ra một deprecation warning trong PHP 8.5
echo MHASH_SHA1;
?>
Khi chạy đoạn mã trên trong PHP 8.5, bạn sẽ thấy một thông báo tương tự như:
Deprecated: Use of constant MHASH_SHA1 is deprecated in /path/to/your/script.php on line 3
Hành động cần thực hiện:
Nếu bạn vẫn đang sử dụng các hằng số MHASH_* trong mã của mình, bạn cần ngay lập tức thay thế chúng bằng các hằng số tương ứng hoặc các phương thức trong extension hash. Ví dụ:
- Thay vì
MHASH_MD5, hãy sử dụng'md5'làm tham số cho hàmhash()hoặc các hàm liên quan. - Thay vì
MHASH_SHA1, hãy sử dụng'sha1'làm tham số cho hàmhash()hoặc các hàm liên quan. - Tương tự cho các thuật toán hash khác được hỗ trợ bởi extension
hash.
Ví dụ về cách thay thế:
Trước (PHP < 8.5):
<?php
$hashContext = mhash(MHASH_SHA256, "data to hash");
$hashResult = mhash_final($hashContext);
echo bin2hex($hashResult) . "\n";
?>
Sau (PHP 8.0+):
<?php
$hashResult = hash('sha256', "data to hash");
echo $hashResult . "\n";
?>
Lưu ý quan trọng: Hãy đảm bảo rằng bạn đã cài đặt và kích hoạt extension hash trên hệ thống của mình để sử dụng các hàm và hằng số mới.
Việc loại bỏ các tính năng cũ là một phần quan trọng trong quá trình phát triển của PHP, giúp ngôn ngữ này trở nên gọn gàng, hiệu quả và bảo trì tốt hơn. Việc chú ý đến các thông báo deprecation và thực hiện các thay đổi cần thiết sẽ giúp ứng dụng của bạn tương thích tốt với các phiên bản PHP mới và đảm bảo tính ổn định lâu dài.
Kết luận
PHP 8.5 hứa hẹn mang đến một loạt các cải tiến và tính năng mới đáng giá, từ những tiện ích nhỏ giúp đơn giản hóa các tác vụ phổ biến đến những thay đổi sâu sắc hơn trong core và các extension. Việc bổ sung các hàm mới như curl_multi_get_handles(), get_exception_handler(), get_error_handler(), array_first(), array_last(), cùng với hỗ trợ stack trace cho lỗi Fatal Error và tùy chọn CLI --ini=diff, sẽ giúp các nhà phát triển viết mã hiệu quả hơn, dễ dàng gỡ lỗi và xây dựng các ứng dụng PHP mạnh mẽ và ổn định hơn. Hãy chuẩn bị tinh thần để khám phá và tận dụng những lợi ích mà PHP 8.5 mang lại sau khi nó chính thức được phát hành vào tháng 11 năm 2025!
Bài viết đã cập nhật, mời bạn xem: Có gì mới trong PHP 8.5?








