
PHP 8.3: Tổng hợp các tính năng mới đáng chú ý
PHP 8.3 đã chính thức ra mắt vào ngày 23/11/2023, mang đến nhiều tính năng mới và cải tiến đáng chú ý. Sau gần nửa năm sử dụng, đây là thời điểm thích hợp để tổng hợp và đánh giá những gì PHP 8.3 mang lại cho cộng đồng lập trình viên.
Nội dung chính
Typed Class Constants
Đây là một trong những tính năng được chờ đợi nhất. Trước PHP 8.3, chúng ta không thể khai báo kiểu dữ liệu cho class constants:
// PHP 8.2 trở về trước
class Status {
public const DRAFT = 'draft';
public const PUBLISHED = 'published';
}
// PHP 8.3
class Status {
public const string DRAFT = 'draft';
public const string PUBLISHED = 'published';
public const int MAX_RETRY = 3;
}Điều này giúp code rõ ràng hơn và tránh lỗi khi kế thừa class.
json_validate() Function
Trước đây, để kiểm tra JSON hợp lệ, chúng ta phải dùng json_decode() và kiểm tra lỗi:
// Cách cũ
$data = json_decode($json);
if (json_last_error() !== JSON_ERROR_NONE) {
// Invalid JSON
}
// PHP 8.3 - Đơn giản hơn
if (json_validate($json)) {
$data = json_decode($json);
}Hàm json_validate() nhanh hơn vì không cần parse toàn bộ JSON, chỉ kiểm tra cú pháp.
Randomizer Class Improvements
Class Random\Randomizer được bổ sung thêm các phương thức mới:
$randomizer = new Random\Randomizer();
// Lấy chuỗi bytes ngẫu nhiên
$bytes = $randomizer->getBytes(16);
// Lấy float ngẫu nhiên trong khoảng [0, 1)
$float = $randomizer->getFloat(0, 1);
// Lấy phần tử ngẫu nhiên từ mảng
$item = $randomizer->pickArrayKeys($array, 1);Dynamic Class Constant Fetch
PHP 8.3 cho phép truy cập class constant bằng biến:
class Config {
public const DATABASE = 'mysql';
public const CACHE = 'redis';
}
$name = 'DATABASE';
echo Config::{$name}; // mysqlOverride Attribute
Attribute mới #[\Override] giúp đánh dấu method override từ parent class:
class ParentClass {
public function doSomething(): void {}
}
class ChildClass extends ParentClass {
#[\Override]
public function doSomething(): void {
// Override parent method
}
#[\Override]
public function doOther(): void {
// Lỗi! Parent không có method này
}
}Nếu parent class không có method được đánh dấu #[\Override], PHP sẽ báo lỗi. Rất hữu ích khi refactor code.
Improved unserialize() Error Handling
Xử lý lỗi khi unserialize được cải thiện, giờ đây sẽ throw exception thay vì warning:
try {
$data = unserialize($invalidString);
} catch (UnserializationFailedException $e) {
// Xử lý lỗi rõ ràng
}Deprecations và Breaking Changes
Một số thay đổi cần lưu ý khi nâng cấp:
get_class()vàget_parent_class()không còn chấp nhận null- Gọi method của class trong string deprecated
- Một số hàm U_* của Intl extension deprecated
Hiệu suất
PHP 8.3 tiếp tục cải thiện hiệu suất với JIT compiler được tối ưu hơn. Benchmark cho thấy:
- Symfony demo: nhanh hơn 5-10%
- WordPress: nhanh hơn 3-5%
- Laravel: nhanh hơn 4-8%
Fullstack Station Tips
PHP 8.3 là bản nâng cấp đáng giá với nhiều tính năng hữu ích cho developer. Typed class constants và #[\Override] giúp code an toàn hơn, trong khi json_validate() đơn giản hóa việc xử lý JSON.
Nếu bạn đang dùng PHP 8.2, việc nâng cấp khá suôn sẻ. Chỉ cần kiểm tra các deprecations và đảm bảo dependencies đã hỗ trợ PHP 8.3. Với các dự án mới, mình khuyến khích sử dụng PHP 8.3 ngay từ đầu để tận dụng các tính năng mới.
