Hướng dẫn php 7 vs php 8 difference - Sự khác biệt giữa php 7 và php 8

Php 8 mang đến một loạt các tính năng mới cải tiến, chức năng và khấu hao 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à người 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 các tính năng này sẽ có tác động lớn hơn đến các học viên.

Vì có nhiều thay đổi quan trọng mà chúng tôi muốn nói, vì vậy 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 còn xem xét rằng nó sẽ tương thích ngược vì nó có một gói thay đổi 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
  • Phương pháp phản ánh [] Phương pháp
  • Mở ra $ điều này từ các đóng cửa không tĩnh
  • Iliverod [] hỗn hợp thứ tự tham số
  • hàm hebrevc []
  • mb_strrpos [] với mã hóa dưới dạng đối số thứ 3
  • hàm money_format []
  • hàm convert_cyr_string []
  • cho phép_url_include trong Chỉ thị
  • RESTORE_INCLUDE_PATH [] hàm

Chúng ta hãy xem các tính năng Php 8 chính:

Các 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 một chuỗi khác hay không, bạn thường sẽ sử dụng str_pos [] sử dụng kim trong khái niệm haystack. 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ả lại vị trí của một chuỗi, bạn chỉ đơn giản là không thể kiểm tra xem có phải strpos [] đã phát hiện ra nó hay không; Nếu nó trả về trên 0 0 [các vị trí không được chỉ số bằng không và bắt đầu bằng 0 thay vì 1], thì điều kiện sẽ coi nó là một giá trị sai, và chỉ ra rằng nó đã được tìm thấy. & NBSP;

Điều này có nghĩa là bạn sẽ phải bọc nó trong một điều kiện như là Strpos [$ Haystack, $ kim]! == Sai. Trong đó sai chỉ ra rằng nó không thể tìm thấy vị trí chuỗi. & Nbsp;

Để chống lại điều này, Php 8 giới thiệu str_contains [], trả về một boolean đơn giản cho biết liệu kim có mặt trong đống cỏ khô 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']] { /* … */ }

str_starts_with [] và str_ends_with [] hàm::

Các chức năng này hiện được kết hợp vào cốt 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 một cái gì đó tương tự như các hàm fmod [] và intdiv [], cho phép phân chia theo 0. thay vì lỗi, bạn sẽ nhận

Chức năng get_debug_type []:

Hàm get_debug_type [] trả về loại biến. get_debug_type [] trả về đầu ra hữu ích hơn cho các mảng, chuỗi, các lớp ẩn danh và đối tượng. Chắc chắn có vẻ như gettype [] nhưng có những lợi ích của sau này. & NBSP;

Ví dụ: gọi getType [] trên lớp \ foo \ thanh 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à các biến đặc biệt trong PHP, đề cập đến các tài nguyên bên ngoài. Một ví dụ là kết nối MySQL, một fileHandle khác.

Mỗi một trong số các tài nguyên đó được gán một ID, mặc dù trước đây là cách duy nhất để biết rằng ID là chuyển tài nguyên cho Int:

$resourceId = [int] $resource;

Php 8 thêm các hàm get_resource_id [], làm cho hoạt động này rõ ràng hơn và an toàn loại:

$resourceId = get_resource_id[$resource];

Có tên là đối số

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

Thay đổi cú pháp này cho phép chúng tôi 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 hiện 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ây giờ bạn sẽ làm điều này:

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

str_starts_with [] và str_ends_with [] hàm:fetched programmatically with PHP Reflection API.

#[CustomAttribute]
class Foo {
    #[AnotherAttribute[42]]
    public function bar[]: void {}
}

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

hàm fdiv []

Hàm fdiv [] mới thực hiện một cái gì đó tương tự như các hàm fmod [] và intdiv [], cho phép phân chia theo 0. thay vì lỗi, bạn sẽ nhận

Chức năng get_debug_type []:

$startDate = $booking->getStartDate[];

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

Hàm get_debug_type [] trả về loại biến. get_debug_type [] trả về đầu ra hữu ích hơn cho các mảng, chuỗi, các lớp ẩn danh và đối tượng. Chắc chắn có vẻ như gettype [] nhưng có những lợi ích của sau này. & NBSP;

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

Ví dụ: gọi getType [] trên lớp \ foo \ thanh sẽ trả về đối tượng. Sử dụng get_debug_type [] sẽ trả về tên lớp.

Hàm get_resource_id []:

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 loại liên minh vì nó chỉ ra "hoàn toàn không có giá trị trả về". Hơn nữa, các công đoàn vô hiệu có thể được viết bằng cách sử dụng | null, hoặc bằng cách sử dụng hiện tại? ký hiệu:

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ị vô hiệu hóa theo mặc định và nếu được bật, JIT biên dịch và lưu trữ 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 ràng buộc IO nhưng cung cấp hiệu suất tăng cho các ứng dụng nặng CPU.

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

Đọc phần 2 của blog ở đây.

Php 8.1 có tốt hơn không?

Php 8.1 là người chiến thắng rõ ràng ở đây, chứng minh nhanh hơn 47,10% so với Php 8.0. Đó là một nổi bật đáng ngạc nhiên ở đây, xem xét mức độ gần gũi của tất cả các kết quả khác. Và nếu bạn so sánh nó với Php 7.2, nó có thể xử lý hơn 50% yêu cầu [hoặc giao dịch] mỗi giây.. That's a surprising standout here, considering how close all the other results are. And if you compare it to PHP 7.2, it can handle more than 50% requests [or transactions] per second.

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

Hiệu suất PHP nhanh hơn có ý nghĩa ngoài bảo mật vì người dùng cuối đang trở nên ít chịu được các trang web và ứng dụng chậm.Theo các điểm chuẩn khác nhau trên web, PHP 8 nhanh hơn đáng kể so với PHP 7. Khi đóng, đã đến lúc nâng cấp các ứng dụng của bạn lên PHP 8!PHP 8 is considerably faster than PHP 7. In closing, it's time to upgrade your applications to PHP 8!

Có đáng để nâng cấp lên Php 8 không?

Lý do lớn nhất để chuyển sang Php 8 trước tháng 11 năm 2022 là vì sự hỗ trợ của cộng đồng cho Php 7.4 đang kết thúc.Nhưng nó không chỉ là về việc di chuyển các phiên bản không cần thiết - Php 8 mang lại những lợi ích với nó.PHP 8 brings bags of benefits with it.

Tại sao PHP 8 nhanh hơn?

Php 8 sẽ nhanh hơn nhiều so với Php 7 vì trình biên dịch JIT không đồng bộ và JIT mới, bạn sẽ có thể xây dựng các ứng dụng không đồng bộ trong Php 8, đây là một vấn đề lớn cho các trang web.Chúng tôi sẽ trình bày các chủ đề sau trong blog này.because of the new asynchronous design and JIT compiler, you will be able to build asynchronous applications in PHP 8 which is a big deal for websites. We'll cover the following topics in this blog.

Bài Viết Liên Quan

Chủ Đề