27/2/2021 10:31:14
Chào: khách!
Đăng nhập Đăng ký
Diễn đàn > Wap / Web > PHP - MySQL
[PHP] PHP 8 - Có gì mới?
19 ngày trước #1
PHP 8.0 là một bản cập nhật lớn của ngôn ngữ PHP.

Nó chứa nhiều tính năng và tối ưu hóa mới bao gồm các đối số được đặt tên, kiểu liên hợp, thuộc tính, quảng bá thuộc tính phương thức khởi tạo, biểu thức so khớp, toán tử nullsafe, JIT và các cải tiến trong kiểu hệ thống, xử lý lỗi và tính nhất quán.

Named arguments

- 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.

PHP 7

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);


PHP 8

htmlspecialchars($string, double_encode: false);



Thuộc tính

- 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.

PHP 7

class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}


PHP 8

class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}



Quảng cáo thuộc tính cấu tạo

- Ít mã soạn sẵn hơn để xác định và khởi tạo thuộc tính.

PHP 7

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;
}
}


PHP 8

class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}



Các loại liên minh

- 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 minh gốc được xác thực trong thời gian chạy.

PHP 7

class Number {
/** @var int|float */
private $number;

/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}

new Number('NaN'); // Ok


PHP 8

class Number {
public function __construct(
private int|float $number
) {}
}

new Number('NaN'); // TypeError



Khớp biểu thức

Đố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; tuyên bố.
- Match không so sánh chặt chẽ.

PHP 7

switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!


PHP 8

echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected



Nhà điều hành Nullsafe

PHP 7

$country =  null;

if ($session !== null) {
$user = $session->user;

if ($user !== null) {
$address = $user->getAddress();

if ($address !== null) {
$country = $address->country;
}
}
}


PHP 8

- Thay vì điều kiện kiểm tra null, giờ đây bạn có thể sử dụng một chuỗi các cuộc 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.

$country = $session?->user?->getAddress()?->country;



So sánh chuỗi ký tự với số

- 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.

PHP 7

0 == 'foobar' // true


PHP 8

0 == 'foobar' // false



Lỗi loại nhất quán cho các chức năng nội bộ

- Hầu hết các chức năng nội bộ hiện ném một ngoại lệ Lỗi nếu việc xác thực các tham số không thành công.

PHP 7

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


PHP 8

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



Biên dịch Just-In-Time

PHP 8 giới thiệu hai công cụ biên dịch JIT. Theo dõi JIT, hứa hẹn nhất trong số hai, cho thấy hiệu suất tốt hơn khoảng 3 lần trên các điểm chuẩn tổng hợp và cải thiện 1,5–2 lần trên một số ứng dụng chạy dài cụ thể. Hiệu suất ứng dụng điển hình ngang bằng với PHP 7.4.


Xem thêm: https://www.php.net/releases/8.0/en.php
16 ngày trước #2
hay quá
15 ngày trước #3
Thanks
Chia sẻ
Menu
Trực tuyến: 1 / 6