Có gì mới ở PHP 7.4
Bài đăng này đã không được cập nhật trong 5 năm
PHP 7.4 có lẽ sẽ được phát hành vào khoảng tháng 12 năm 2019 (thời điểm viết bài là tháng 5/2019), tuy nhiên thông tin này chưa được xác nhận. Cùng xem sẽ có những thay đổi gì mới nhé.
Bài này mình có đăng trên blog cá nhân ở đây : Có gì mới ở PHP 7.4
Short closures / Short arrow function
Short closures (Short arrow function) giúp bạn code closure function một cách ngắn gọn hơn
$result = Collection::from([1, 2])
->map(function ($v) {
return $v * 2;
})
->reduce(function ($tmp, $v) {
return $tmp + $v;
}, 0);
echo $result; // 6
// with arrow functions:
$result = Collection::from([1, 2])
->map(fn($v) => $v * 2)
->reduce(fn($tmp, $v) => $tmp + $v, 0);
echo $result; // 6
Bài chi tiết:
Typed properties
Ở phiên bản PHP 7.4, bạn có thể type-hinted các properties của Class
class Example
{
// Toàn bộ các kiểu đều được hỗ trợ, ngoại trừ "void" và"callable"
public int $scalarType;
protected ClassName $classType;
private ?ClassName $nullableClassType;
// Kiểu cũng hợp lệ trên các thuộc tính tĩnh
public static iterable $staticProp;
// Kiểu cũng có thể được sử dụng với ký hiệu/từ khóa "var"
var bool $flag;
// Typed properties có thể có các giá trị mặc định
public string $str = "foo";
public ?string $nullableStr = null;
// Kiểu áp dụng cho tất cả các thuộc tính trong một lần khai báo
public float $x, $y;
// tương đương với:
public float $x;
public float $y;
}
Bài chi tiết: PHP RFC: Typed Properties 2.0
Improved type variance
Kiểu trả về của function được ghi đè trong class con sẽ không bắt buộc phải giống với kiểu trả về của function đó trong class cha nữa:
class ParentType
{
//
}
class ChildType extends ParentType
{
//
}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
}
Tương tự là kiểu của tham số truyền vào cũng không bắt buộc phải giống với function của class cha nữa:
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
Bài chi tiết: PHP RFC: Covariant Returns and Contravariant Parameters
Null Coalescing Assignment Operator
Là một toán tử mới, thay vì code như này:
$data['date'] = $data['date'] ?? new DateTime();
thì bạn có thể code ngắn hơn ở PHP 7.4 như sau:
$data['date'] ??= new DateTime();
Bài chi tiết: PHP RFC: Null Coalescing Assignment Operator
Array spread operator
Bạn sẽ có thể sử dụng toán tử ...
cho arrays, lưu ý là chỉ sử dụng được với array có keys có kiểu là numeric thôi nhé:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]
Bài chi tiết:
Foreign function interface
Foreign Function Interface (viết tắt FFI) cho phép chạy code C bằng cách gọi từ PHP, điều đó có nghĩa PHP extensions sẽ được có thể được viết bằng code PHP thuần, tất nhiên bạn vẫn phải có kiến thức về C
Bài chi tiết: PHP RFC: FFI - Foreign Function Interface
Preloading
Preloading là một bổ sung tuyệt vời cho PHP core, có thể dẫn đến một số cải tiến hiệu suất lớn.
Nếu bạn đang phải thường xuyên sử dụng các framework hiện nay, toàn bộ file sẽ phải tải và biên dịch lại mỗi khi có request.
Preloading cho phép server tải PHP file vào memory khi khởi động và khiến chúng luôn sẵn sàng cho các request tiếp theo.
Tuy nhiên chúng ta phải đánh đổi việc khởi động lại server mỗi khi file được preload thay đổi để đổi lấy cải thiện về hiệu năng như trên.
Bài chi tiết: PHP RFC: Preloading
Custom object serialization
Bài chi tiết: PHP RFC: New custom object serialization mechanism
Reflection for references
Class ReflectionReference
được thêm vào ở PHP 7.4.
Bài chi tiết: PHP RFC: Reflection for references
Thêm function mb_str_split
Thêm function mb_str_split
tương tự như str_split
nhưng với multi byte strings.
Bài chi tiết: PHP RFC: mb_str_split
Extension ext-hash
sẽ luôn được kích hoạt
Như tiêu đề ext-hash
sẽ luôn được kích hoạt khi bạn install PHP 7.4
Bài chi tiết: RFC: Always available hash extension
PEAR sẽ không được kích hoạt mặc định nữa
Vì BEAR không được maintain tích cực nữa nên sẽ không được kích hoạt mặc định khi cài PHP 7.4
Password Hashing Registry
Những thay đổi bên trong về cách sử dụng các thư viện hash, để người dùng dễ sử dụng chúng hơn.
Bài chi tiết: PHP RFC: Password Hashing Registry
Deprecate ext/wwdx
Bài chi tiết: PHP RFC: Unbundle ext/wddx
PHP Short open tags deprecated
PHP Short open tags <?
sẽ không khuyến khích dùng nữa và sẽ bị loại bỏ ở PHP 8. Cú pháp <?=
không bị ảnh hưởng.
Bài chi tiết: PHP RFC: Deprecate PHP Short open tags
Deprecate left-associative ternary operator
// cách viết này sẽ không được khuyến khích sử dụng nữa và sẽ báo lỗi ở PHP 8
1 ? 2 : 3 ? 4 : 5;
// thế này thì OK
(1 ? 2 : 3) ? 4 : 5;
Bài viết chi tiết: PHP RFC: Deprecate left-associative ternary operator
Cải tiến quy trình bỏ phiếu RFC
Cải tiến có vẻ không liên quan đến PHP 7.4 lắm, tuy nhiên:
- RFC luôn cần hơn 2/3 phiếu đồng thuận để được chấp nhận.
- Sẽ không có RFC có thời gian bỏ phiếu ngắn nữa, tất cả RFC phải được mở ít nhất 2 tuần.
Vấn đề tương thích ngược với các phiên bản PHP cũ hơn
Xem tài liệu nâng cấp để giải quyết các vấn đề về có thể xảy ra khi nâng cấp lên PHP 7.4.
Vẫn đang tiếp tục cập nhật...
All rights reserved