DANH MỤC: PHP 7

Những tính năng mới trong PHP 7.4


Như các bạn đã biết thì PHP 7.4 vừa được ra mắt vào ngày 28/11/2019, ngoài sự tối ưu về hiệu năng và nâng cao khả năng đọc bảo trì code thì PHP cũng mang đến cho chúng ta rất nhiều tính năng mới. Và hôm nay, mình sẽ liệt kê một số tính năng mới nổi bật trong phiên bản PHP 7.4 lần này cho mọi người cùng biết.

1. Tính năng mới

Định nghĩa kiểu cho property trong object

- Ở phiên bản này PHP đã cho phép chúng ta khai báo kiểu của thuộc tính trong Object.

VD:

<?php

class User {
    public int $id;
    public string $name;
}
?>

Như ở trong ví dụ trên thì $id chỉ nhận giá trị là số integer và $name chỉ nhận giá trị là string.

Arrow functions

- Thay vì phải khai báo callback function bằng một closure hay một lambda functrion thì PHP đã hỗ trợ chúng ta thêm một cách khai báo mới với cú pháp ngắn gọn hơn đó là arrow function.

Để khai báo một arrow function các bạn sử dụng cú pháp sau:

fn($arguments){ /*code*/ }

VD: sử dụng arrow function kết hợp với array_map.

<?php

$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>

Cho phép thay đổi kiểu giá trị trả về của phương thức và của tham số

- Giờ chúng ta đã có thể thay đổi kiểu dữ liệu trả về của phương thức trong object hay của parameter truyền vào đã được xác định từ class cha, bằng cách ghi đè chúng.

VD: Ở ví dụ này mình thay đổi kiểu dữ liệu trả về của method() từ A thành B.

<?php

class A {}
class B extends A {}

class Producer {
    public function method(): A {}
}
class ChildProducer extends Producer {
    public function method(): B {}
}

Null coalescing assignment operator

- Chúng ta đã có thể vừa check null vừa gán giá trị luôn cho biến cần check bằng cách thêm dấu = vào sau toán tử đó.

Thay vì trước đây chúng ta phải làm như sau:

if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

Thì giờ đối với PHP 7.4 chúng ta chỉ cần viết như sau:

$array['key'] ??= computeDefault();

Unpacking mảng

- Chức năng này giống hệt với cú pháp Spread Operater Trong ES6, chức năng này hỗ trợ chúng ta unpack một mảng bằng cách dùng 3 dấu chấm (...) trước mảng đó.

VD:

function test(...$args)
{
    var_dump($args);
}

test(1, 2, 3);

/* output trả về:
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
*/

- Và dưới đây là một số ví dụ liên quan đến việc sử dụng unpacking array này, các bạn đọc xong rồi tự mò nhé vì phần này hơi dài :D

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
 
function getArr()
{
    return ['a', 'b'];
}

$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']
 
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']
 
function arrGen()
{
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}

$arr8 = [...arrGen()]; //[11, 12, 13, 14]

Numeric literal separator

- Bây giờ numeric literal đã có thể chứa dấu gạch ngang (-).

VD:

<?php

6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binary

Phương thức __toString() đã có thể throw exception

- Phương thức __toString đã có thể được throw ra một exception.

VD:

<?php

class TestClass
{
    public function __toString()
    {
        throw new Exception("Test exception");
    }
}

$class = new TestClass();
echo $class;

Hàm strip_tags() cho phép chuyền vào mảng thẻ.

- Giờ đã có thể truyền vào tham số thứ 2 là một mảng các thẻ mà cần loại bỏ trong string.

VD:

// Trước PHP 7.4
strip_tags($str, '<a><p>');

// Từ PHP 7.4
strip_tags($str, ['a', 'p'])

Op Cache preloading

- Chức năng mới này cho phép opcache load sẵn các script vào trong tầng opcodes, cái này mình sẽ trình bày chi tiết ở một bài sau nhé :D

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

The best way to learn is to share

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia

Bình Luận

    Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!