Hướng dẫn php 7.4 release date

Sắp tới đây PHP sẽ được nâng cấp lên phiên bản PHP8 nên phiên bản PHP 7 cuối cùng được Release chính là PHP74.phiên bản này mang đến nhiều tính năng mới, bổ sung cú pháp và sửa lỗi. Nên cũng không có gì là quá cao siêu cả.

PHP 7.4 được phát hành vào ngày 28 tháng 11 năm 2019 mà tới giờ LPTech mới có cơ hội viết 1 bài cho các bạn đọc. Để xem Có gì mới trong PHP 7.4 này nhé. Hãy cùng LPTech điểm qua thôi nào, nếu bạn có biết thêm thông tin thì hãy chia sẻ với LP nhé.

Xem thêm: Git là gì? Sử dụng Git nâng cao chuẩn Git-flow

Các tính năng mới trong PHP 7.4

PHP 7.4 đi kèm với một số lượng tính năng mới đáng kể. Chúng ta sẽ bắt đầu với một danh sách tất cả các tính năng mới, và sau đó xem xét các thay đổi và phản đối.

Arrow function

Các arrow function, còn được gọi là "short clourse".

Trong khi trước đây bạn viết điều này:

array_map[function [User $user] { 
    return $user->id; 
}, $users]
 ​

Nhưng bây giờ bạn có thể viết thế này:

array_map[fn [User $user] => $user->id, $users]​


Có một vài lưu ý về arrow function:

  • Chúng luôn có thể truy cập phạm vi cha mẹ, không cần từ khóa use.

  • $this có sẵn giống như clourse bình thường.

  • Các arrow function chỉ có thể chứa một biểu thức, đó cũng là câu lệnh return.

$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

Typed Properties

Các biến trong class có thể được gợi ý:

class LPTechClass
{
    public string $name;
    public ?Foo $foo;
}
 

Có rất nhiều điều để nói về tính năng này, nhưng chúng ta sẽ đi chi tiết ở bài viết khác nhé.

Xem thêm: Các loại chuẩn hoá trong CSDL Quan hệ

Type Variance

Thật tốt khi thấy một số cải tiến đang thực sự đến trong lõi của PHP.

Bạn có thể sử dụng covariant return types -

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes[]: ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes[]: ChildType
    { /* … */ }
}
 ​

- và contravariant arguments

class A
{
    public function contraVariantArguments[ChildType $type]
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments[ParentType $type]
    { /* … */ }
}

Toán tử gán kết hợp Null

Tiếp theo là toán tử gán kết hợp null.

Viết tắt cho các hoạt động liên kết null. Thay vì làm điều này:

$data['date'] = $data['date'] ?? new DateTime[];

Bạn có thể làm thế này:

$data['date'] ??= new DateTime[];

Spread Operator

Tiếp theo, giờ đây có thể sử dụng toán tử trải rộng trong mảng.

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Lưu ý rằng điều này chỉ hoạt động với các mảng với key là số. Key là chuỗi chưa được hỗ trợ.

Ký tự phân tách số

PHP 7.4 cho phép sử dụng dấu gạch dưới để phân tách trực quan các giá trị số. Nó trông như thế này:

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;
                      ^   ^​ Các dấu gạch dưới chỉ đơn giản là bị bỏ qua bởi PHP Engine.
 

Các dấu gạch dưới chỉ đơn giản là bị bỏ qua bởi PHP Engine.

Foreign funtion interface - FFI

Chuyển sang một số tính năng cấp độ cốt lõi hơn: Foreign funtion interface gọi tắt là 'FFI', cho phép chúng ta gọi code C từ userland.

Điều này có nghĩa là các phần mở rộng PHP có thể được viết bằng PHP thuần túy và được tải thông qua composer.

Cần lưu ý rằng đây là một chủ đề phức tạp. Bạn vẫn cần có kiến ​​thức C để có thể sử dụng đúng tính năng này.

Preloading

Một tính năng cấp thấp hơn là Preloading. Đây là một bổ sung tuyệt vời cho phần lõi của PHP, nó có thể dẫn đến một số cải tiến hiệu suất đáng kể.

Nói tóm lại: Nếu bạn đang sử dụng một framework, các tệp của nó phải được tải và liên kết theo mọi request. Preloading cho phép máy chủ tải các tệp PHP trong bộ nhớ khi khởi động và có sẵn cho tất cả các request tiếp theo.

Việc tăng hiệu suất tất nhiên đi kèm với một cái giá hợp lý: Nếu nguồn của các tệp được tải sẵn bị thay đổi, máy chủ phải được khởi động lại.

Xem thêm: Những lỗi thiết kế cơ sở dữ liệu thường gặp

Custom object serialization

Hai magic method mới đã được thêm vào: __serialize và __unserialize. trong phiên bản PHP 7.4. Sự khác biệt giữa các phương thức này và __sleep và __wakeup 

Ánh xạ cho các tham chiếu

Các thư viện như var dumper của Symfony phụ thuộc rất nhiều vào Relection API để kết xuất một biến đáng tin cậy

Trước đây không thể ánh xạ đúng các tham chiếu, dẫn đến các thư viện này dựa vào các bản hack để phát hiện chúng.

$array2 = $array1;
$array2[$key] = $unique_cookie;
if [$array1[$key] === $unique_cookie] {
    // $array1[$key] is a reference
}

PHP 7.4 đã thêm class ReflectionReference để giải quyết vấn đề này.

final class ReflectionReference {
    /* Returns ReflectionReference if array element is a reference, null otherwise. */
    public static function fromArrayElement[array $array, int|string $key]: ?ReflectionReference;
 
    /* Returns unique identifier for the reference. The return value format is unspecified. */
    public function getId[]: int|string;
 
    private function __construct[]; // Always throws
    private function __clone[]; // Always throws
}

Weak references

Weak reference là các tham chiếu đến các đối tượng, mà không ngăn chặn chúng bị phá hủy. Tham chiếu yếu cho phép lập trình viên giữ lại một tham chiếu đến một đối tượng không ngăn đối tượng bị phá hủy; Chúng rất hữu ích để thực hiện bộ đệm như cấu trúc. Chúng hiện được hỗ trợ trong PHP bởi phần mở rộng.

final class WeakReference {
    public static function create[object $object] : WeakReference;
 
    public function get[] : ?object;
}

Thêm mb_str_split

Hàm này cung cấp chức năng tương tự như str_split, nhưng trên các chuỗi nhiều byte.

Chủ Đề