Giới thiệu PHP 7.4

PHP hoặc bộ xử lý siêu văn bản là một ngôn ngữ kịch bản được sử dụng rộng rãi để phát triển các chủ đề và plugin WordPress. Bằng cách sử dụng phiên bản PHP mới nhất, bạn có thể dễ dàng cải thiện hiệu suất của trang web của mình. PHP 7.3, được phát hành vào tháng 4 đã giới thiệu các cải tiến về bảo mật và hiệu suất.
Thời gian xử lý yêu cầu đã giảm 15% khi người dùng WordPress chuyển từ PHP 7.2 sang PHP 7.3, điều này cho thấy rõ rằng PHP 7.3 nhanh hơn 10% so với PHP 7.2.
Hãy bắt đầu với một cái nhìn sâu hơn về một số tính năng cải tiến mới đã được dự kiến phát hành trong phiên bản mới nhất, ví dụ 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.

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.

Source : viblo.asia

Related Articles