PHP 8.4, dự kiến ra mắt vào tháng 11/2024, mang đến nhiều tính năng và cải tiến mới nhằm nâng cao hiệu suất, tối ưu hóa mã nguồn, và cải thiện trải nghiệm phát triển. Dưới đây là một cái nhìn tổng quan về những thay đổi đáng chú ý nhất trong phiên bản này:
1. Property Hooks
Một trong những tính năng được mong chờ nhất là Property Hooks, lấy cảm hứng từ các ngôn ngữ như Kotlin và C#. Tính năng này cho phép bạn định nghĩa trực tiếp các phương thức get và set cho các thuộc tính của class. Điều này giúp giảm bớt sự cần thiết của các getter/setter thủ công, cho phép kiểm soát nhiều hơn cách các thuộc tính được truy cập và thay đổi. Chẳng hạn, thay vì viết phương thức getter và setter riêng, bạn có thể định nghĩa trực tiếp chúng ngay trên thuộc tính.
Ví dụ về Property Hooks:
class User {
private bool $isModified = false;
public string $fullName {
// Hook "get": Khi truy cập thuộc tính, sẽ trả về kết quả dựa trên các thuộc tính khác.
get => $this->first . " " . $this->last;
// Hook "set": Khi gán giá trị mới, giá trị này sẽ được phân tích và gán vào các thuộc tính riêng.
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true; // Cập nhật trạng thái khi giá trị thay đổi
}
}
public function __construct(private string $first, private string $last) {}
}
// Sử dụng
$user = new User("John", "Doe");
echo $user->fullName; // Output: John Doe
$user->fullName = "Jane Smith"; // Gán giá trị mới cho fullName
echo $user->fullName; // Output: Jane SmithCách hoạt động:
- get: Khi bạn truy cập vào thuộc tính
fullName, nó sẽ thực thi logic tùy chỉnh trong phầnget. Ở ví dụ trên,gettrả về một chuỗi kết hợp từ hai thuộc tính$firstvà$last. - set: Khi bạn gán giá trị cho
fullName, hooksetsẽ kích hoạt. Tại đây, chuỗi được gán sẽ được tách thành tên và họ, và chúng được gán cho các thuộc tính$firstvà$lasttương ứng.
Ưu điểm:
- Tính năng ngắn gọn hơn: Bạn có thể xử lý getter và setter một cách linh hoạt mà không cần viết các phương thức riêng lẻ, giúp mã ngắn gọn và dễ bảo trì hơn.
- Kiểm soát nhiều hơn: Bạn có thể tùy chỉnh hành vi của thuộc tính khi đọc hoặc ghi giá trị, chẳng hạn như xác thực giá trị trước khi gán, hoặc xử lý logic phức tạp khi lấy giá trị.
2. Cú pháp đơn giản hơn khi tạo đối tượng
PHP 8.4 cho phép loại bỏ dấu ngoặc đơn khi gọi phương thức sau khi khởi tạo đối tượng. Điều này làm cho cú pháp gọn gàng hơn và dễ đọc hơn. Ví dụ, thay vì viết:
$name = (new MyClass())->method();Bạn chỉ cần viết:
$name = new MyClass()->method();Điều này cũng áp dụng cho các phương thức tĩnh và hằng số trong class.
3. Chức năng array mới
PHP 8.4 bổ sung các hàm mảng mới như array_find(), array_find_key(), array_any(), và array_all(). Những hàm này giúp tìm kiếm và kiểm tra phần tử trong mảng dựa trên callback một cách hiệu quả hơn. Ví dụ, array_find() sẽ trả về phần tử đầu tiên trong mảng thỏa mãn điều kiện của callback, trong khi array_any() sẽ trả về true nếu có bất kỳ phần tử nào thỏa mãn điều kiện.
3.1. array_find()
- Mô tả: Trả về phần tử đầu tiên trong mảng mà callback trả về
true. - Cú pháp:
array_find(array $array, callable $callback): mixed;- Ví dụ:
$result = array_find($array, function ($element) {
return $element > 10;
});3.2. array_find_key()
- Mô tả: Tương tự như
array_find(), nhưng trả về key của phần tử đầu tiên mà callback trả vềtrue. - Cú pháp:
array_find_key(array $array, callable $callback): mixed;
- Ví dụ:
$key = array_find_key($array, function ($value) {
return $value === 'apple';
});
3.3. array_any()
- Mô tả: Trả về
truenếu có bất kỳ phần tử nào trong mảng mà callback trả vềtrue. - Cú pháp:
array_any(array $array, callable $callback): bool;
- Ví dụ:
$hasAny = array_any($array, function ($value) {
return $value % 2 === 0;
});
3.4. array_all()
- Mô tả: Trả về
truenếu tất cả phần tử trong mảng mà callback trả vềtrue. - Cú pháp:
array_all(array $array, callable $callback): bool;
- Ví dụ:
$areAllEven = array_all($array, function ($value) {
return $value % 2 === 0;
});
Những hàm này giúp đơn giản hóa các thao tác tìm kiếm và kiểm tra điều kiện trên mảng mà trước đây có thể đòi hỏi nhiều dòng mã hơn khi sử dụng các hàm có sẵn như array_filter()
4. Hỗ trợ chuỗi ký tự đa byte
Trong PHP 8.4, có thêm nhiều hàm mới để xử lý chuỗi đa byte (multibyte), đặc biệt hữu ích cho các ngôn ngữ không phải Latin như tiếng Nhật hay tiếng Trung. Các hàm mới bao gồm mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), và mb_lcfirst(). Những hàm này giúp xử lý chuỗi có nhiều ký tự phức tạp dễ dàng hơn, cải thiện khả năng làm việc với đa ngôn ngữ.
Dưới đây là các ví dụ về các hàm mới trong PHP 8.4 để xử lý chuỗi ký tự đa byte: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), và mb_lcfirst(). Các hàm này được thiết kế để làm việc với các chuỗi đa byte (multibyte), hỗ trợ các ngôn ngữ có ký tự phức tạp như tiếng Nhật, Trung Quốc, v.v.
4.1. mb_trim()
- Chức năng: Loại bỏ khoảng trắng từ đầu và cuối của chuỗi đa byte.
- Cú pháp:
string mb_trim(string $string, string $characters = null, string $encoding = null);
- Ví dụ:
$string = " こんにちは ";
echo mb_trim($string); // Output: "こんにちは"
4.2. mb_ltrim()
- Chức năng: Loại bỏ khoảng trắng từ đầu chuỗi đa byte.
- Cú pháp:
string mb_ltrim(string $string, string $characters = null, string $encoding = null);
- Ví dụ:
$string = " こんにちは ";
echo mb_ltrim($string); // Output: "こんにちは "
4.3. mb_rtrim()
- Chức năng: Loại bỏ khoảng trắng từ cuối chuỗi đa byte.
- Cú pháp:
string mb_rtrim(string $string, string $characters = null, string $encoding = null);
- Ví dụ:
$string = " こんにちは ";
echo mb_rtrim($string); // Output: " こんにちは"
4.4. mb_ucfirst()
- Chức năng: Viết hoa ký tự đầu tiên của chuỗi đa byte.
- Cú pháp:
string mb_ucfirst(string $string, string $encoding = null);
- Ví dụ:
$string = "こんにちは";
echo mb_ucfirst($string); // Output: "こんにちは" (ký tự đầu tiên không đổi do ngôn ngữ)
4.5. mb_lcfirst()
- Chức năng: Viết thường ký tự đầu tiên của chuỗi đa byte.
- Cú pháp:
string mb_lcfirst(string $string, string $encoding = null);
- Ví dụ:
$string = "こんにちは";
echo mb_lcfirst($string); // Output: "こんにちは" (không thay đổi do ký tự đầu đã là chữ thường)
Những hàm này giúp bạn xử lý các chuỗi đa byte một cách dễ dàng, đặc biệt khi làm việc với các ngôn ngữ có bộ ký tự phức tạp. Đây là cải tiến đáng giá của PHP 8.4 so với các phiên bản trước, giúp lập trình viên làm việc với chuỗi Unicode hiệu quả hơn
5. Cải tiến JIT
Công cụ biên dịch Just-In-Time (JIT) đã được nâng cấp với cấu hình đơn giản hơn, giúp tối ưu hóa hiệu suất. Với cấu hình mới, bạn có thể dễ dàng bật hoặc tắt JIT mà không cần điều chỉnh nhiều tham số phức tạp. Cải tiến này giúp giảm mức tiêu thụ bộ nhớ trong một số trường hợp.
6. Loại bỏ kiểu tham số ngầm Nullable
Trong PHP 8.4, việc khai báo kiểu tham số ngầm nullable sẽ bị loại bỏ. Trước đây, nếu một biến có giá trị mặc định là null, PHP sẽ tự động coi đó là nullable. Tuy nhiên, từ phiên bản 8.4 trở đi, bạn cần phải khai báo rõ ràng biến đó là nullable bằng cách sử dụng cú pháp ?. Điều này giúp mã nguồn trở nên rõ ràng hơn và tránh những lỗi tiềm ẩn trong tương lai.
7. Hỗ trợ HTML5
PHP 8.4 giới thiệu class \DOM\HTMLDocument mới để hỗ trợ đầy đủ việc phân tích cú pháp HTML5, thay thế cho class \DOMDocument cũ. Điều này giúp xử lý nội dung HTML hiện đại dễ dàng hơn, hỗ trợ tốt hơn cho các dự án web lớn.
8. Cải tiến bảo mật
Một trong những cải tiến bảo mật đáng chú ý trong PHP 8.4 là việc tăng mức "cost" mặc định của thuật toán bcrypt từ 10 lên 12. Điều này làm cho quá trình tính toán bcrypt chậm hơn, tăng cường bảo vệ mật khẩu của người dùng trước các cuộc tấn công dò tìm mật khẩu.
9. Cập nhật DOM và Parsing tài liệu XML
Với phiên bản 8.4, PHP cải thiện khả năng phân tích cú pháp các tài liệu XML lớn, hỗ trợ tốt hơn cho các ứng dụng web phức tạp sử dụng nhiều tài liệu HTML và XML.
Kết luận
PHP 8.4 mang đến những cải tiến đáng giá, tập trung vào việc làm cho mã nguồn gọn gàng, hiệu quả hơn và dễ đọc hơn. Các tính năng như Property Hooks, cú pháp đơn giản hơn, và các hàm mảng mới giúp tối ưu hóa công việc của lập trình viên, trong khi các cải tiến bảo mật và hỗ trợ HTML5 giúp ứng dụng an toàn và linh hoạt hơn.
Phiên bản này là một bước tiến lớn, đặc biệt dành cho các nhà phát triển mong muốn khai thác các tính năng hiện đại và mạnh mẽ của PHP.








