Hướng dẫn php 8 features

Sau đây là một số chìa khóa mới các tính năng của PHP 8: 

JIT [Đúng lúc]  

JIT là tính năng nổi bật nhất của PHP 8. PHP JIT là một phần độc lập của OPcache. Nó có thể bật và tắt trong thời gian chạy và thời gian biên dịch.

Hãy xem xét rằng JIT là viết tắt của trình biên dịch Just In Time. Nó là một cách thực thi mã máy tính trong quá trình thực thi chương trình hơn là trước khi thực thi.

Do đó, JIT dịch mã byte PHP sang mã máy. Chức năng này đã cải thiện hiệu suất của các ứng dụng có các hàm toán học nặng. Nó làm tăng hiệu suất của các ứng dụng PHP, vì trong thời gian chạy, nó có thể biên dịch mã được tạo thành mã máy gốc. Nếu JIT được kích hoạt, mã sẽ được chạy bởi chính CPU, đó là lý do tại sao nó làm cho PHP rất nhanh.
Theo RFC, tiềm năng chuyển nhiều mã hơn từ C sang PHP đã tăng lên vì PHP đủ nhanh. 

Các loại công đoàn  

Các loại công đoàn là một rất quan trọng hàm trong PHP 8 bởi vì PHP là một cấu trúc được định kiểu động. Hiện tại, PHP hỗ trợ hai kiểu liên hợp, một số kiểu null và mảng hoặc có thể duyệt. Trong PHP 8, các kiểu liên hợp chấp nhận các giá trị của nhiều kiểu, thay vì một kiểu duy nhất cho biết một trong hai kiểu đó có thể được sử dụng. 

Thuộc tính 

Hàm thuộc tính có sẵn trong nhiều ngôn ngữ khác như C #, C ++, Rust và các ngôn ngữ khác. Trước PHP 8, PHP hỗ trợ một dạng siêu dữ liệu không có cấu trúc. Bây giờ trong phiên bản mới, bạn có thể sử dụng siêu dữ liệu có cấu trúc với cú pháp gốc PHP. Thuộc tính cung cấp khả năng thêm thông tin siêu dữ liệu mà máy có thể đọc được có thể được sử dụng để chỉ định thuộc tính cho các đối tượng, phần tử hoặc tệp.  

Xử lý lỗi 

Trước khi bản nâng cấp mới nhất này, PHP phát ra một cảnh báo và trả về null khi gặp một giá trị mà nó không thể sử dụng. Vì cảnh báo PHP không ngăn chặn khối còn lại nên hành vi này không được mong muốn. Bây giờ trong PHP 8 các hàm bên trong có thể ném một ngoại lệ cho lỗi kiểu hoặc lỗi giá trị. Việc chuyển một tham số không hợp lệ cho một hàm do người dùng xác định là một lỗi kiểu. Bây giờ thay vì một cảnh báo, PHP có thể đưa ra các ngoại lệ.  

WeakMaps 

Để cải thiện hiệu suất và ngăn chặn rò rỉ bộ nhớ trong các quy trình chạy lâu dài, PHP 8 giới thiệu các bản đồ yếu kém. Bản đồ yếu là một tập hợp các đối tượng dữ liệu trong đó các khóa được tham chiếu yếu. Bản đồ yếu là một bộ nhớ đệm dữ liệu có nguồn gốc từ một đối tượng không cần tồn tại lâu hơn một đối tượng. Nếu đối tượng rơi ra ngoài phạm vi, nó sẽ không ngăn người thu gom rác dọn sạch đối tượng. 

Nhà điều hành Nullsafe

Nullsafe về cơ bản là đoản mạch có nghĩa là bỏ qua việc đánh giá một biểu thức dựa trên một số điều kiện nhất định. Toán tử PHP Nullsafe là một tính năng mới cung cấp chuỗi tùy chọn cho PHP. Nó làm ngắn mạch truy xuất nếu giá trị là null, mà không gây ra bất kỳ lỗi nào. Toán tử an toàn rỗng là? ->

Khớp biểu thức 

Biểu thức đối sánh tương tự như câu lệnh switch l, nó có một biểu thức chủ đề được so sánh với nhiều lựa chọn thay thế. Nó hỗ trợ các biểu thức một dòng và không cần câu lệnh ngắt. Match Expression thực hiện so sánh chặt chẽ. 

Ví dụ trong PHP 7 và các phiên bản cũ hơn: 

Switch [ 7.0 ] { 
  Case '7.0’ :
           $answer  = “Beautiful”
        Break;
Case 7.0 : 
    $answer = “wonderful” 
Break; 
} 
Echo $answer

Trong PHP 8, chúng ta có thể viết một Biểu thức Đối sánh:

Echo match [8.0] { 
      ‘8.0’ => “Beautiful” 
      8.0 => “Wonderful” 

};

Bài viết được sự cho phép của tác giả Lê Chí Dũng

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 JIT, named arguments, union types, attributes, constructor property promotion, match expression, nullsafe operator và các cải tiến trong kiểu hệ thống, xử lý lỗi và tính nhất quán.

Tuyển dụng php online cần gấp trong tháng

JIT [Just in Time]

JIT được cải tiến hơn và trong PHP 8 giới thiệu hai công cụ biên dịch JIT.
Và Tracing JIT, hứa hẹn nhất vì 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 ngang bằng hoặc tốt hơn với PHP 7.4.

Đối số được đặt tê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 [Attributes]

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

Tiết kiệm viết mã 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,
  ] {}
}

Hợp nhất các kiểu [Union types]

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

Biểu thức hợp nhau [Match expression]

Match là biểu thức mới tương tự như switch và có các tính năng sau:

  • Match 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 sánh chỉ hỗ trợ các biểu thức một dòng và không cần break; để kết thúc lệnh.
  • 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

Toán tử Nullsafe [Nullsafe operator]

Thay vì điều kiện kiểm tra null, bây giờ 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 fails, 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 gán là null.

/*** 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;

Nhất quán lỗi cho các chức năng nội bộ [Consistent type errors for internal functions]

Hầu hết các chức năng nội bộ hiện ném Error exception 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

Tham khảo:

  • //www.php.net/
  • //wiki.php.net/rfc/jit

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

  • 5 tính năng mới trong PHP 7 cần phải biết
  • Cách viết “Hello World” với 28 Ngôn ngữ Lập trình
  • 10 tuyệt kĩ từ trang web nhanh nhất thế giới [phần 2]

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Chủ Đề