PHP 8-Phiên bản cải tiến tối ưu và hiệu suất hơn
Lượt xem: 1840Chọn ngôn ngữ:
[PHP 8] đã được phát hành vào 26 tháng 11 năm 2020, trở thành phiên bản cập nhật tối ưu cho ngôn ngữ lập trình PHP. Với PHP 8, các nhà phát triển hay các lập trình viên sẽ có thêm nhiều cơ hội trải nghiệm và ứng dụng các tính năng mới cũng như nhiều tiện ích được nâng cấp và tối ưu hoá trong quá trình xây dựng và thiết kế website.
Những tính năng và đặc điểm trong PHP 8 được nâng cấp và cập nhật trong phiên bản mới này bao gồm: Named Argument, union types, thuộc tính (attributes), (hàm khởi tạo) constructor property promotion, match expression, nullsafe operator, JIT, và các cải tiến trong hệ thống, xử lý lỗi, và tính nhất quán.
1. Named Argument
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
htmlspecialchars($string, double_encode: false);
Chỉ xác định các thông số bắt buộc, bỏ qua các thông số tùy chọn.
Các lập luận không phụ thuộc vào trật tự và tự ghi lại.
2. Attributes
class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
Thay vì chú thích PHPDoc, giờ đây bạn có thể sử dụng siêu dữ liệu có cấu trúc với cú pháp gốc của PHP.
3. Constructor property promotion
class Point {
public float $x;
public float $y;
public float $z;
public function __construct(
float $x = 0.0,
float $y = 0.0,
float $z = 0.0,
) {
$this->x = $x;
$this->y = $y;
$this->z = $z;
}
}
class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}
Ít mã soạn sẵn hơn để xác định và khởi tạo thuộc tính.
4. Union types
class Number {
/** @var int|float */
private $number;
/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}
new Number('NaN'); // Ok
class Number {
public function __construct(
private int|float $number
) {}
}
new Number('NaN'); // TypeError
Thay vì các chú thích PHPDoc cho sự kết hợp của các kiểu, bạn có thể sử dụng các khai báo kiểu liên kết gốc được xác thực trong thời gian chạy.
5. Match expression
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
Đối sánh mới tương tự như chuyển đổi và có các tính năng sau:
Đối sánh là một biểu thức, có nghĩa là kết quả của nó có thể được lưu trữ trong một biến hoặc được trả về.
Các nhánh so khớp chỉ hỗ trợ các biểu thức một dòng và không cần dấu ngắt; hiển thị.
Match không so sánh chặt chẽ.
6. Nullsafe operator
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
$country = $session?->user?->getAddress()?->country;
Thay vì điều kiện kiểm tra null, bây giờ bạn có thể sử dụng chuỗi lệnh gọi với toán tử nullsafe mới. Khi đánh giá một phần tử trong chuỗi không thành công, quá trình thực thi của toàn bộ chuỗi sẽ bị hủy bỏ và toàn bộ chuỗi được đánh giá là null.
7. Saner string to number comparisons
0 == 'foobar' // true
0 == 'foobar' // false
Khi so sánh với một chuỗi số, PHP 8 sử dụng phép so sánh số. Nếu không, nó chuyển đổi số thành chuỗi và sử dụng so sánh chuỗi.
8. Consistent type errors for internal functions
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
Hầu hết các chức năng nội bộ sẽ đưa ra lỗi ngoại lệ nếu việc xác nhận các tham số không thành công.
9. Just-In-Time compilation
"JIT" là viết tắt của "just in time". Bạn có thể biết rằng PHP là một ngôn ngữ thông dịch: nó không được biên dịch như một chương trình C, Java hoặc Rust. Thay vào đó, nó được dịch sang mã máy - thứ mà CPU hiểu - trong thời gian chạy.
"JIT" là một kỹ thuật sẽ biên dịch các phần của mã trong thời gian chạy, để phiên bản đã biên dịch có thể được sử dụng thay thế.
Hãy coi nó giống như một "phiên bản được lưu trong bộ nhớ cache" của mã được thông dịch, được tạo ra trong thời gian chạy.
JIT sẽ tăng tốc độ của một ứng dụng do cách nó xử lý việc biên dịch các tập lệnh PHP, qua một vài bài kiểm tra hiệu năng của những lập trình viên thì tốc độ có thể nhanh hơn 45% so với phiên bản PHP 7.4
Phiên bản PHP-8 này với việc bổ sung tính năng JIT compiler sẽ hứa hẹn hiệu năng tốt hơn, tuyệt vời hơn nữa.