Sự khác biệt giữa PHP 7.4 và PHP 8 là gì?

PHP 8 mang đến một loạt các cải tiến về tính năng, chức năng mới và không dùng nữa cho ngôn ngữ so với PHP 7. Trong số tất cả các tính năng mới này, trình biên dịch JIT là tính năng chia sẻ ánh đèn sân khấu. Tuy nhiên, các tính năng khác như thay đổi cú pháp cũng được tính đến vì chính những tính năng này sẽ có tác động lớn hơn đối với các học viên

Vì có nhiều thay đổi quan trọng mà chúng tôi muốn nói đến, nên chúng tôi đã chia blog này thành nhiều phần. Đây là phần 1 của loạt bài

Các vấn đề với mã cũ

Với PHP 8, chúng ta không nên nghĩ rằng nó sẽ tương thích ngược nữa vì nó có một loạt các thay đổi về cú pháp. Những thay đổi mới nhất bao gồm

  • Di sản trích dẫn ma thuật
  • loại thực
  • Các phương thức xuất phản chiếu []
  • Bỏ ràng buộc $this khỏi các lần đóng không tĩnh
  • implode[] hỗn hợp thứ tự tham số
  • hàm hebrevc[]
  • mb_strpos[] với mã hóa làm đối số thứ 3
  • hàm money_format[]
  • hàm convert_cyr_string[]
  • allow_url_include trong chỉ thị
  • hàm restore_include_path[]

Chúng ta hãy xem các tính năng chính của PHP 8

chức năng mới

str_contains[]

Khi cố gắng tìm hiểu xem một chuỗi có phải là một phần của chuỗi khác hay không, thông thường bạn sẽ sử dụng hàm str_pos[] sử dụng cái kim trong khái niệm đống cỏ khô. Nó trả về một số nguyên hiển thị vị trí đầu tiên mà bạn nhìn thấy kim. Khi nó trả về vị trí của một chuỗi, bạn không thể kiểm tra xem strpos[] có phát hiện ra nó hay không; .  

Điều này có nghĩa là bạn sẽ phải bọc nó trong một điều kiện chẳng hạn như “strpos[$haystack, $needle]. == sai. ” Trường hợp sai nghĩa là không tìm thấy vị trí của chuỗi.  

Để chống lại điều này, PHP 8 giới thiệu hàm str_contains[], hàm này trả về một giá trị boolean đơn giản cho biết liệu cái kim có trong đống rơm hay không

Vì vậy, thay vì làm điều này

if [strpos['string with lots of words', 'words'] !== false] { /* … */ }

 

Bây giờ bạn sẽ làm điều này

if [str_contains['string with lots of words', 'words']] { /* … */ }

các hàm str_starts_with[] và str_ends_with[].

Các chức năng này hiện được tích hợp vào lõi

str_starts_with['haystack', 'hay']; // true
str_ends_with['haystack', 'stack']; // true

hàm fdiv[]

Hàm fdiv[] mới thực hiện điều gì đó tương tự như hàm fmod[] và intdiv[], cho phép chia cho 0. Thay vì lỗi, bạn sẽ nhận được INF, -INF hoặc NAN, tùy trường hợp

hàm get_debug_type[]

Hàm get_debug_type[] trả về kiểu của một biến. get_debug_type[] trả về kết quả hữu ích hơn cho mảng, chuỗi, lớp ẩn danh và đối tượng. Chắc chắn nó giống như gettype[] nhưng có những lợi ích sau này.  

Ví dụ. gọi gettype[] trên một lớp \Foo\Bar sẽ trả về đối tượng. Sử dụng get_debug_type[] sẽ trả về tên lớp

hàm get_resource_id[]

Tài nguyên là biến đặc biệt trong PHP, đề cập đến tài nguyên bên ngoài. Một ví dụ là kết nối MySQL, một ví dụ khác là xử lý tệp

Mỗi một trong những tài nguyên đó được gán một ID, mặc dù trước đây cách duy nhất để biết id đó là chuyển tài nguyên sang int

$resourceId = [int] $resource;

 

PHP 8 thêm các hàm get_resource_id[], làm cho thao tác này rõ ràng hơn và an toàn hơn

$resourceId = get_resource_id[$resource];

đối số được đặt tên

Các đối số được đặt tên cho phép bạn chuyển các giá trị vào một hàm, bằng cách chỉ định tên giá trị, để bạn không phải xem xét thứ tự của chúng và bạn cũng có thể bỏ qua các tham số tùy chọn

function foo[string $a, string $b, ?string $c = null, ?string $d = null]
{ /* … */ }

foo[
    b: 'value b',
    a: 'value a',
    d: 'value d',
];

Thuộc tính của hàm tạo

Sự thay đổi cú pháp này cho phép chúng ta tạo các đối tượng truyền dữ liệu. Thay vì chỉ định các thuộc tính lớp và hàm tạo cho chúng, giờ đây PHP có thể kết hợp chúng thành một

Vì vậy, thay vì làm điều này

class Money 
{
    public Currency $currency;
 
    public int $amount;
 
    public function __construct[
        Currency $currency,
        int $amount,
    ] {
        $this->currency = $currency;
        $this->amount = $amount;
    }
}

Bạn có thể làm được việc này

class Money 
{
    public function __construct[
        public Currency $currency,
        public int $amount,
    ] {}
}

Các thuộc tính cho phép chúng ta khai báo siêu dữ liệu cho các hàm, lớp, thuộc tính và tham số của chúng ta. Thuộc tính ánh xạ tới tên lớp PHP [được khai báo bằng chính Thuộc tính] và chúng có thể được tìm nạp theo chương trình bằng API phản chiếu PHP.

________số 8_______

Điều này cho phép chúng tôi dễ dàng khai báo các thuộc tính/chú thích mà trước đây yêu cầu lưu trữ chúng trong các phần tử khối tài liệu và phân tích cú pháp chuỗi để suy ra chúng.  

Toán tử an toàn null

Toán tử hợp nhất null tương tự như toán tử bậc ba nhưng sẽ hoạt động giống như một tập hợp trên toán hạng bên trái thay vì chỉ sử dụng giá trị boolean của nó. Điều này làm cho toán tử này đặc biệt hữu ích cho các mảng và gán giá trị mặc định khi một biến không được đặt

Nó không hoàn toàn đáng tin cậy vì nó không hoạt động trên các cuộc gọi phương thức. Thay vào đó, bạn cần kiểm tra trung gian hoặc dựa vào các trình trợ giúp tùy chọn do một số khung cung cấp

$startDate = $booking->getStartDate[];

$dateAsString = $startDate ? $startDate->asDateTimeString[] : null;

Với việc bổ sung toán tử an toàn null, giờ đây chúng ta có thể có hành vi giống như kết hợp null trên các phương thức

if [str_contains['string with lots of words', 'words']] { /* … */ }
0

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

Các loại liên kết là tập hợp của hai hoặc nhiều loại cho biết rằng một trong hai loại đó có thể được sử dụng

if [str_contains['string with lots of words', 'words']] { /* … */ }
1

Lưu ý rằng void không bao giờ có thể là một phần của kiểu kết hợp vì nó biểu thị "không có giá trị trả về nào cả". Hơn nữa, các hiệp hội nullable có thể được viết bằng cách sử dụng. null hoặc bằng cách sử dụng hiện có?

if [str_contains['string with lots of words', 'words']] { /* … */ }
2
if [str_contains['string with lots of words', 'words']] { /* … */ }
3

Trình biên dịch JIT

PHP Opcache hỗ trợ JIT. Nó bị tắt theo mặc định và nếu được bật, JIT sẽ biên dịch và lưu trữ các hướng dẫn gốc. Nó không tạo ra sự khác biệt đáng chú ý trong các ứng dụng web liên kết với IO nhưng cung cấp khả năng tăng hiệu suất cho các ứng dụng nặng về CPU

Sự khác biệt giữa php7 và PHP 8 là gì?

Nhóm đằng sau việc phát hành PHP 8 tự hào về thông báo của họ về hiệu suất tốt hơn, cú pháp tốt hơn và an toàn loại được cải thiện. PHP 8 nhanh hơn PHP 7, cú pháp yêu cầu ít mã hơn và hỗ trợ gõ tốt hơn . Ba loại cải tiến này cung cấp một bản phát hành phiên bản chính mạnh mẽ của PHP.

Tôi nên sử dụng PHP 7 hay 8?

Ngoài ra, phiên bản PHP mới hơn hoạt động tốt hơn các phiên bản cũ. Sự gia tăng đáng kể về hiệu suất và bảo mật có thể là tất cả những gì cần thiết để cải thiện và đảm bảo trải nghiệm người dùng tích cực trên trang web của bạn. PHP 8 nhanh hơn đáng kể so với PHP 7 theo nhiều tiêu chuẩn web khác nhau.

Điều gì đã thay đổi trong PHP 8?

PHP8. 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, các loại liên kết, thuộc tính, quảng cáo thuộc tính hàm tạo, biểu thức khớp, toán tử nullsafe, JIT và các cải tiến trong hệ thống loại, xử lý lỗi và tính nhất quán

Cách nâng cấp PHP 7. 4 đến 8?

Gói PHP
Gỡ cài đặt/Gỡ bỏ PHP 7. x và Tiện ích mở rộng
Autoclean và Autoremove
Thêm kho lưu trữ PPA của Ondřej Surý
Cài đặt PHP8
Cài đặt phần mở rộng PHP 8
Kiểm tra phiên bản PHP

Chủ Đề