Hướng dẫn what is the difference between php 7.4 and php 8? - sự khác biệt giữa php 7.4 và php 8 là gì?

Với có thể ép, tất cả các trang web bây giờ có thể & NBSP; nâng cấp các phiên bản PHP từ 7.4 lên 8.0 hoặc 8.1 chỉ bằng một lần nhấp trong bảng điều khiển có thể điều khiển được.upgrade PHP versions from 7.4 to 8.0 or 8.1 with just one click in MyPressable Control Panel.

Để thay đổi phiên bản PHP của bạn:

  • Đăng nhập vào bảng điều khiển có thể sử dụng được
  • Chuyển đến Cài đặt cho trang web của bạn
  • Chuyển phiên bản PHP theo & nbsp; thông tin trang web & nbsp;

Hướng dẫn what is the difference between php 7.4 and php 8? - sự khác biệt giữa php 7.4 và php 8 là gì?

Để tìm hiểu thêm về các giới hạn của PHP đối với các giá trị có thể áp dụng, bao gồm các giá trị như & nbsp; max_execut_time, memory_limit và upload_max_filesize, bạn có thể đọc & NBSP của chúng tôi thông tin & giới hạn PHP & NBSP; bài viết.max_execution_time, memory_limit, and upload_max_filesize, you can read our PHP Info & Limitations article.

Bạn cũng có thể & nbsp; tìm hiểu thêm về các cân nhắc dịch vụ và nền tảng của chúng tôi ở đây.learn more about our Service And Platform Considerations here.

Chúng tôi đã phác thảo một số thông tin và cải tiến giữa ba phiên bản PHP có sẵn dưới đây:

Php 7.4Reled: 28 tháng 11 năm 2019Released: November 28th, 2019

Hỗ trợ chính thức cho Php phiên bản 7.4 sẽ tiếp tục cho đến tháng 11 năm 2022, khi phiên bản đạt đến cuộc sống. Php 7.4 đã nghỉ hưu có thể áp dụng như một tùy chọn cho các trang web mới vào ngày 9 tháng 8 năm 2022. Cộng đồng WordPress vẫn còn một số việc phải làm để hỗ trợ Php 8.0, vì vậy công ty mẹ của chúng tôi, Automattic, đã cam kết các nguồn lực để giúp duy trì các cập nhật bảo mật cho Php 7.4 tạm thời . Điều này sẽ cho phép thời gian để cộng đồng bắt kịp và tiếp tục hỗ trợ các trang web trên Php 7.4. & NBSP; End of Life. Pressable retired PHP 7.4 as an option for new sites on August 9, 2022. The WordPress community still has some work to do to support PHP 8.0 broadly, so our parent company, Automattic, has committed resources to help maintain security updates for PHP 7.4 temporarily. This will allow time for the community to catch up and continue supporting websites on PHP 7.4. 

Php 8.0reled: ngày 26 tháng 11 năm 2020Released: November 26th, 2020

PHP 8.0 là một bản cập nhật lớn cố gắng giải quyết các vấn đề trong quá khứ và làm cho PHP thân thiện hơn với nhà phát triển hơn bằng cách cải thiện tính minh bạch. & NBSP; Nó cũng chứa các tính năng mới và cải tiến tối ưu hóa.

Các tính năng mới bao gồm:

  • Có tên là đối số
  • Các loại công đoàn
  • Thúc đẩy tài sản của nhà xây dựng
  • Tùy chỉnh đối tượng tuần tự hóa
  • Phù hợp biểu thức
  • Nhà điều hành Nullsafe
  • Những cải tiến trong hệ thống loại và xử lý lỗi

Php 8.1reled: ngày 25 tháng 11 năm 2021Released: November 25th, 2021

Php 8.1 là bản cập nhật chính của ngôn ngữ PHP mang lại hiệu suất tốt hơn, cú pháp tốt hơn và & NBSP; Cải thiện loại an toàn. & NBSP; Nó cũng chứa các tính năng mới và cải tiến tối ưu hóa.

Các tính năng mới bao gồm:

  • Có tên là đối số
  • Các loại công đoàn
  • Thúc đẩy tài sản của nhà xây dựng
  • Tùy chỉnh đối tượng tuần tự hóa
  • Phù hợp biểu thức
  • Nhà điều hành Nullsafe
  • Những cải tiến trong hệ thống loại và xử lý lỗi
  • Php 8.1reled: ngày 25 tháng 11 năm 2021

Thay đổi ngôn ngữ:

Gửi báo cáo yêu cầu kéo một lỗi

Mục lục

  • Các tính năng mới
  • Thay đổi lạc hậu không tương thích
  • Các tính năng không dùng nữa
  • Những thay đổi khác

Phiên bản chính mới này mang theo một số tính năng mới và một số tính năng không tương thích cần được kiểm tra trước khi chuyển đổi phiên bản PHP trong môi trường sản xuất.

Xem thêm Hướng dẫn di chuyển cho phiên bản PHP 7.0.x, 7.1.x, 7.2.x, 7.3.x. 7.4.x.

+ Thêm một ghi chú

Người dùng đóng góp ghi chú

Không có người dùng đóng góp ghi chú cho trang này.

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ạn có thể làm được việc này:

if (str_contains('string with lots of words', 'words')) { /* … */ }

Các thuộc tính cho phép chúng tôi khai báo dữ liệu meta cho các chức năng, lớp, thuộc tính và tham số của chúng tôi. Các thuộc tính Bản đồ cho tên lớp PHP (được khai báo với một thuộc tính) và chúng có thể được tìm nạp theo chương trình với API phản xạ PHP.:

Đ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 chuỗi để suy ra chúng. & NBSP;

str_starts_with('haystack', 'hay'); // true
str_ends_with('haystack', 'stack'); // true

Nhà điều hành an toàn null

Toán tử Null Coalescing tương tự như toán tử ternary nhưng sẽ hoạt động như một ISSET 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 mặc định khi một biến không được đặt.

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ạ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 tôi khai báo dữ liệu meta cho các chức năng, lớp, thuộc tính và tham số của chúng tôi. Các thuộc tính Bản đồ cho tên lớp PHP (được khai báo với một thuộc tính) và chúng có thể được tìm nạp theo chương trình với API phản xạ PHP.fetched programmatically with PHP Reflection API.

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

Đ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 chuỗi để suy ra chúng. & NBSP;


Nhà điều hành an toàn null

Toán tử Null Coalescing tương tự như toán tử ternary nhưng sẽ hoạt động như một ISSET 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 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 người trợ giúp tùy chọn được cung cấp bởi một số khung:

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;

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

if (str_contains('string with lots of words', 'words')) { /* … */ }
0

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

Các loại công đoàn là một tập hợp gồm hai hoặc nhiều loại chỉ ra 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 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.