Ngày 28/12/2019 PHP 7.4 đã chính thức ra mắt để cải thiện và bổ sung thêm một số tính năng mới. Qua bài viết này các bạn cùng với mình hãy tìm hiểu xem phiên bản PHP 7.4 có gì mới nhé.
Mục lục
I. Những cập nhật nổi bật
Trong phiên bản PHP 7.4 lần này, có một số cập nhật nổi bật sau:
1.1 Cú pháp mới, viết code ngắn gọn hơn với arrow function
Nếu bạn từng biết tới khái niệm Arrow function trong Javascript thì nó cũng tương tự với PHP kể từ phiên bản 7.4 trở đi. Cú pháp của PHP arrow function được thể hiện thông qua ví dụ sau:
<?php
// Cách viết thường
$extended = function ($c) use ($callable, $factory) {
return $callable($factory($c), $c);
};
// Viết với arrow function
$extended = fn($c) => $callable($factory($c), $c);
1.2 Cú pháp mới, gộp các phần tử mảng với toán tử “dấu 3 chấm”
PHP 7.4 cho phép bạn gộp các phần tử của mảng thông qua “toán tử trải rộng”, bạn có thể theo dõi qua ví dụ sau:
<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
Một ví dụ khác với cách sử dụng trong nhiều trường hợp hơn.
<?php
$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];
Lưu ý: “Toán tử trải rộng” này không thể sử dụng với mảng có key là string.
1.3 Cú pháp mới, khai báo kiểu dữ liệu cho thuộc tính của lớp
PHP ngày càng “nghiêm túc” hơn với kiểu dữ liệu. Từ phiên PHP 7.4 trở đi, bạn có thể khai báo kiểu dữ liệu cho thuộc tính của lớp, bạn có thể theo dõi qua ví dụ sau:
<?php
class User {
public int $id;
public string $name;
}
$user = new User;
$user->id = 'hello'; // sẽ throw exception
$user->name = true; // vẫn gán được, nhưng bị ép về kiểu string. Kết quả là 1
Với ví dụ trên, khi bạn gán giá trị cho $user->id
, thì PHP sẽ tự động ép về kiểu integer, nếu không ép được PHP sẽ throw một exception. Điều này cũng tương tự với $user->name
.
Một ví dụ khác với cách sử dụng phong phú hơn.
<?php
class User
{
public int $id;
public string $name;
// Kiểu dữ liệu cũng có thể áp dụng với thuộc tính static
public static string $instance;
// Cho phép thuộc tính address nhận giá null hoặc là instance của lớp Address
public ?Address $address = null;
// Có thể khai báo kiểu dữ liệu cùng lúc cho nhiều thuộc tính
public int $x, $y;
// Cũng có thể sử dụng với từ khóa "var"
var bool $flag;
}
II. Chi tiết cập nhật
Dưới đây là danh tất cả các tính năng được cập nhật trong phiên bản PHP 7.4 lần này dành cho những bạn muốn tìm hiểu chi tiết:
- Typed Properties
- Arrow Functions
- Limited Return Type Covariance and Argument Type Contravariance
- Unpacking Inside Arrays
- Numeric Literal Separator
- Weak References
- Allow Exceptions from __toString()
- Opcache Preloading
- Several Deprecations
- Extensions Removed from the Core
Một vài thông tin khác:
- Download phiên bản PHP mới nhất: Tại đây
- Theo dõi change log chi tiêt: Tại đây
- Tìm hiểu cách nâng cấp từ PHP 7.3.x lên PHP 7.4: Tại đây
Tài liệu tham khảo:
- https://laravel-news.com/php-7-4
- https://laravel-news.com/short-arrow-functions
- https://laravel-news.com/spread-operator-in-array-expressions-coming-to-php-7-4
- https://laravel-news.com/php7-typed-properties