PHP
figonkingx  

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}; // mysql

Override 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()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.

Tham khảo

Comments

Leave A Comment