Chú ý: Chào mừng bạn đến với nắng mới yêu thương!

PHP 8-Phiên bản cải tiến tối ưu và hiệu suất hơn

PHP 8-Phiên bản cải tiến tối ưu và hiệu suất hơn

Lượt xem: 1642
Chọ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.

PHP 8- Phiên bản phát hành 26-11-2020

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

PHP 7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
 
PHP 8
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

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) { /* ... */ }
}

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 8 (1)

3. Constructor property promotion

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,
  ) {}
}

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

4. Union types

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

 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.

PHP 8(2)

5. Match expression

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

Đố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

PHP 7
$country =  null;

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

  if ($user !== null) {
    $address = $user->getAddress();
 
    if ($address !== null) {
      $country = $address->country;
    }
  }
}
 
PHP 8
$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.

PHP 8 (3)

7. Saner string to number comparisons

PHP 7
0 == 'foobar' // true
 
PHP 8
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

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

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

Just In Time

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

 


Bình luận

Thể loại

Thống kê truy cập

Hiển Thị từ 18:00 ngày 27/03/2020 đến nayTruy cập