Php 7.4, bản phát hành nhỏ của Php 7 tiếp theo, đã được phát hành cho tính khả dụng chung vào ngày 28 tháng 11 năm 2019. Vì vậy, đã đến lúc chúng tôi đi sâu vào một số bổ sung thú vị nhất và các tính năng mới sẽ giúp PHP nhanh hơn và đáng tin cậy hơn.
Php 7.4 [Bản phát hành chính thức] có sẵn cho tất cả các máy khách Kinsta & nbsp; trong bảng điều khiển Mykinsta. 🤘 in the MyKinsta dashboard. 🤘
Ngay cả khi PHP 7.4 tăng đáng kể hiệu suất và cải thiện khả năng đọc mã, PHP 8 sẽ là cột mốc thực sự cho hiệu suất PHP, vì đề xuất cho sự bao gồm JIT đã được phê duyệt.
Dù sao, hôm nay chúng tôi đã trải qua một số tính năng thú vị nhất và những thay đổi mà chúng tôi mong đợi với Php 7.4. Chỉ cho hồ sơ, đây là những ngày quan trọng cho phiên bản 7.4:
- Ngày 6 tháng 6 năm 2019: Php 7.4 Alpha 1
- Ngày 18 tháng 7 năm 2019: Php 7.4 Beta 1 - Đặc điểm đóng băng
- Ngày 28 tháng 11 năm 2019: Phát hành Php 7.4 GA
Bạn có thể kiểm tra danh sách đầy đủ các tính năng và bổ sung trên trang RFC chính thức.
Những gì mới trong PHP với PHP 7.4?
Trong bài đăng này, chúng tôi bao gồm một số thay đổi và tính năng cần được thêm vào ngôn ngữ với bản phát hành cuối cùng của Php 7.4:
Quên Array_merge: Php 7.4 mang đến toán tử lây lan trong biểu thức mảng
Có sẵn từ Php 5.6, việc giải nén đối số là một cú pháp để giải nén các mảng và truyền tải vào danh sách đối số. Để giải nén một mảng hoặc một đường truyền, nó phải được chuẩn bị bởi [3 chấm], như được hiển thị trong ví dụ sau:
function test[...$args] { var_dump[$args]; }
test[1, 2, 3];
Bây giờ Php 7.4 RFC này đề xuất mở rộng tính năng này để định nghĩa mảng:
$arr = [...$args];
Lợi ích đầu tiên của toán tử lây lan trong biểu thức mảng là tất cả về hiệu suất. Trên thực tế, tài liệu RFC tuyên bố:Spread Operator in array expression is all about performance. In fact, the RFC doc states:
Nhà điều hành lan truyền nên có hiệu suất tốt hơn
7. Điều đó không chỉ bởi vì toán tử lan truyền là cấu trúc ngôn ngữ trong khiParse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
7 là một hàm, mà còn bởi vì tối ưu hóa thời gian biên dịch có thể được thực hiện cho các mảng không đổi.Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
Một lợi thế đáng kể của toán tử lây lan là nó hỗ trợ bất kỳ đối tượng có thể đi được nào, trong khi hàm
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
7 chỉ hỗ trợ các mảng.Dưới đây là một ví dụ về việc giải nén đối số trong biểu thức mảng:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
Nếu bạn chạy mã này trong Php 7.3 trở lên, PHP đã ném lỗi phân tích cú pháp:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
Thay vào đó, Php 7.4 sẽ trả về một mảng:
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
RFC nói rằng chúng ta có thể mở rộng cùng một mảng nhiều lần. Hơn nữa, chúng ta có thể sử dụng cú pháp vận hành lây lan ở mọi nơi trong mảng, vì các phần tử bình thường có thể được thêm vào trước hoặc sau khi vận hành lan truyền. Vì vậy, mã sau sẽ hoạt động như chúng ta có thể mong đợi:
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
Nó cũng có thể giải nén các mảng được trả về bởi một hàm trực tiếp vào một mảng mới:
function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
Php 7.4 đầu ra mảng sau:
array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
Chúng ta cũng có thể sử dụng cú pháp của Trình tạo:
function generator[] {
for [$i = 3; $i
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
0, như được hiển thị bên dưới:$arr = [...$args];
5Nhưng với PHP 7.4, các biến được xác định trong phạm vi cha mẹ được nắm bắt hoàn toàn bởi giá trị [liên kết phạm vi giá trị tiềm ẩn]. Vì vậy, chúng ta có thể viết toàn bộ chức năng thấy ở trên trên một dòng duy nhất:implicitly captured by value [implicit by-value scope binding]. So we can write the whole function seen above on a single line:
$arr = [...$args];
6Biến được xác định trong phạm vi cha mẹ có thể được sử dụng trong hàm mũi tên chính xác như thể chúng ta đang sử dụng
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
1 và nó không thể sửa đổi một biến từ phạm vi cha mẹ.Cú pháp mới là một cải tiến tuyệt vời cho ngôn ngữ vì nó cho phép chúng tôi xây dựng mã dễ đọc và có thể duy trì hơn. Chúng tôi cũng có thể sử dụng tham số và các loại trả về, giá trị mặc định, danh sách đối số có độ dài thay đổi [hàm variadic], chúng tôi có thể vượt qua và trả về bằng tham chiếu, v.v. Cuối cùng, việc đóng ngắn cũng có thể được sử dụng trong các phương thức lớp và chúng có thể sử dụng Biến
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
2 giống như đóng cửa thường xuyên.RFC này đã được phê duyệt với 51 đến 8 phiếu, vì vậy chúng tôi có thể hy vọng nó sẽ là một phần của bổ sung Php 7.4.
Nhà điều hành phân công Null Coalescing
Được thêm vào Php 7, toán tử Coalesce [
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
3] có ích khi chúng ta cần sử dụng toán tử ternary kết hợp với array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
4. Nó trả về toán hạng đầu tiên nếu nó tồn tại và không phải là array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
5. Nếu không, nó trả lại toán hạng thứ hai. Đây là một ví dụ:$arr = [...$args];
7Những gì mã này làm khá đơn giản: nó tìm thấy tham số yêu cầu và đặt giá trị mặc định nếu nó không tồn tại. Ý nghĩa của dòng đó là rõ ràng, nhưng nếu chúng ta có tên biến dài hơn nhiều như trong ví dụ này từ RFC thì sao?it fetches the request parameter and sets a default value if it doesn’t exist. The meaning of that line is clear, but what if we had much longer variable names as in this example from the RFC?
Bạn muốn biết làm thế nào chúng ta tăng lưu lượng truy cập trên 1000%?
Tham gia với hơn 20.000 người khác nhận được bản tin hàng tuần của chúng tôi với các mẹo nội bộ WordPress!
Theo dõi ngay
$arr = [...$args];
8Về lâu dài, mã này có thể hơi khó duy trì. Vì vậy, nhằm mục đích giúp các nhà phát triển viết mã trực quan hơn, RFC này đề xuất giới thiệu nhà điều hành phân công liên kết Null [
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
6]. Vì vậy, thay vì viết mã trước đó, chúng tôi có thể viết như sau:null coalescing assignment operator [array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
6]. So, instead of writing the previous code, we could write the following:$arr = [...$args];
9Nếu giá trị của tham số bên trái là
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
7, thì giá trị của tham số bên phải được sử dụng. Lưu ý rằng, trong khi nhà điều hành hợp tác là một nhà điều hành so sánh, array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
6 là một nhà điều hành chuyển nhượng.Note that, while the coalesce operator is a comparison operator,
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
6 is an assignment operator.Đề xuất này đã được phê duyệt với 37 đến 4 phiếu.
Thuộc tính gõ 2.0
Khai báo loại đối số hoặc gợi ý loại, cho phép chỉ định loại biến dự kiến sẽ được truyền đến một hàm hoặc phương thức lớp. Loại gợi ý là một tính năng có sẵn kể từ Php 5 và vì Php 7.2, chúng tôi có thể sử dụng chúng với kiểu dữ liệu
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
9. Bây giờ Php 7.4 mang đến loại gợi ý một bước tiến bằng cách thêm hỗ trợ cho các khai báo loại thuộc tính hạng nhất. Đây là một ví dụ rất cơ bản:$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
0Tất cả các loại được hỗ trợ, ngoại trừ
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
0 và $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
1:$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
1RFC giải thích lý do tại sao
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
0 và $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
1 không được hỗ trợ:Loại void không được hỗ trợ, vì nó không hữu ích và có ngữ nghĩa không rõ ràng.
Loại có thể gọi được không được hỗ trợ, bởi vì hành vi của nó phụ thuộc vào ngữ cảnh.
Vì vậy, chúng tôi có thể sử dụng một cách an toàn
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
4, $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
5, $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
6, $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
7, $arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
8, array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
9, function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
0, function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
1, function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
2, bất kỳ tên lớp hoặc giao diện nào và các loại có thể điều chỉnh được [function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
3].
Các loại có thể được sử dụng trên các thuộc tính tĩnh:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
2Chúng cũng được phép với ký hiệu
function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
4:$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
3Nó có thể đặt các giá trị thuộc tính mặc định, tất nhiên phải khớp với loại thuộc tính được khai báo, nhưng chỉ các thuộc tính có thể vô hiệu hóa có thể có giá trị
array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
7 mặc định:$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
4Cùng loại áp dụng cho tất cả các thuộc tính trong một khai báo duy nhất:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
5Điều gì xảy ra nếu chúng ta mắc lỗi trên loại tài sản? Xem xét mã sau:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
6Trong mã trên, chúng tôi đã khai báo loại thuộc tính chuỗi, nhưng chúng tôi đặt một mảng làm giá trị thuộc tính. Trong kịch bản như vậy, chúng ta gặp phải lỗi gây tử vong sau:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
7RFC này đã được phê duyệt với 70 đến 1 phiếu bầu.
Tài liệu tham khảo yếu
Với RFC này, PHP 7.4 giới thiệu lớp yếu, cho phép các lập trình viên giữ lại một tham chiếu đến một đối tượng không ngăn cản đối tượng bị phá hủy.
Hiện tại, PHP hỗ trợ các tài liệu tham khảo yếu bằng cách sử dụng mở rộng như PECL-WEAKREF. Dù sao, API mới khác với lớp
function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
6 được ghi lại.Dưới đây là một ví dụ từ tác giả của đề xuất này, Nikita Popov:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
8function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
7 đầu tiên in function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
8, trong khi bản in function buildArray[]{
return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray[], 'pink', 'violet', 'yellow'];
7 thứ hai array[5] {
[0]=>
string[6] "banana"
[1]=>
string[6] "orange"
[2]=>
string[5] "apple"
[3]=>
string[4] "pear"
[4]=>
string[10] "watermelon"
}
5, vì đối tượng được tham chiếu đã bị phá hủy.Các slide cho buổi nói chuyện Php 7.4 của tôi tại #Phprussia2019. Là một hội nghị tuyệt vời! //t.co/zlr9bj2akl
- Nikita Popov [@nikita_ppv] ngày 19 tháng 5 năm 2019
RFC này đã thông qua với 28 đến 5 phiếu.
Covariant Return và các thông số trái ngược
Phương sai là một thuộc tính của hệ thống phân cấp lớp mô tả cách các loại của một hàm tạo loại ảnh hưởng đến các phân nhóm. Nói chung, một hàm tạo loại có thể là:
- Bất biến: Nếu loại của loại siêu hạn chế loại phân nhóm.: if the type of the super-type constrain the type of the subtype.
- Covariant: Nếu thứ tự của các loại được bảo tồn [các loại được đặt hàng từ cụ thể hơn đến chung chung hơn].: if the ordering of types is preserved [types are ordered from more specific to more generic].
- Contravariant: Nếu nó đảo ngược thứ tự [các loại được đặt hàng từ chung chung đến cụ thể hơn].: if it reverses the order [types are ordered from more generic to more specific].
Hiện tại, PHP chủ yếu có tham số bất biến và các loại trả về, với một vài ngoại lệ. RFC này đề xuất cho phép hiệp phương sai và trái ngược với các loại tham số và loại trả về, cũng cung cấp một số ví dụ về mã.
Dưới đây là một ví dụ về loại trở lại đồng biến:covariant return type:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump[$fruits];
9Và đây là một ví dụ về loại tham số contravariant:contravariant parameter type:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
0Xem RFC để xem xét kỹ hơn về hiệp phương sai và trái ngược trong Php 7.4.
RFC này đã vượt qua với 39 đến 1 phiếu bầu.
Tải trước
Đề xuất này từ Dmitry Stogov là một trong những yêu thích của chúng tôi bởi vì nó sẽ mang lại sự thúc đẩy đáng kể về hiệu suất. Tải trước là quá trình tải thư viện và khung vào opcache khi khởi tạo mô -đun [đọc thêm về vòng đời PHP].Preloading is the process of loading libraries and frameworks into the OPCache at module initialization [read more about PHP lifecycle].
Dưới đây là cách tải trước hoạt động theo lời của Dmitry:
Khi khởi động máy chủ - trước khi bất kỳ mã ứng dụng nào được chạy - chúng tôi có thể tải một bộ tệp PHP nhất định vào bộ nhớ - và cung cấp nội dung của chúng có sẵn vĩnh viễn cho tất cả các yêu cầu tiếp theo sẽ được phục vụ bởi máy chủ đó. Tất cả các chức năng và các lớp được xác định trong các tệp này sẽ có sẵn cho các yêu cầu ra khỏi hộp, giống như các thực thể nội bộ.
Các tệp này được tải trên máy chủ khởi động, được thực thi trước bất kỳ ứng dụng nào và có sẵn cho bất kỳ yêu cầu nào trong tương lai. Điều đó tuyệt vời về mặt hiệu suất.
Tải trước được kiểm soát bởi Chỉ thị
array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
1 cụ thể: array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
2. Chỉ thị này chỉ định một tập lệnh PHP được biên dịch và thực thi tại máy chủ khởi động. Tệp này có thể được sử dụng để tải trước các tệp bổ sung, bao gồm chúng hoặc thông qua hàm array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
3 [đọc thêm trên tài liệu PHP].Nhưng có một nhược điểm. Trên thực tế, RFC tuyên bố rõ ràng:
Các tệp được tải trước vẫn được lưu trong bộ nhớ Opcache mãi mãi. Việc sửa đổi các tệp nguồn tương ứng của họ đã giành được bất kỳ hiệu ứng nào mà không cần khởi động lại máy chủ khác.
Tuy nhiên, tất cả các chức năng được xác định trong các tệp được tải sẵn sẽ được tải vĩnh viễn vào chức năng PHP và các bảng lớp và vẫn có sẵn cho mọi yêu cầu trong tương lai. Điều này sẽ dẫn đến những cải tiến hiệu suất tốt, ngay cả khi những cải tiến này có thể thay đổi đáng kể.
Bạn có thể đọc thêm về các hạn chế và ngoại lệ của việc tải trước trên trang RFC tải trước chính thức.
Cơ chế tuần tự hóa đối tượng tùy chỉnh mới
Đây là một đề xuất khác từ Nikita Popov được phê duyệt với phần lớn số phiếu.
Hiện tại, chúng tôi có hai cơ chế khác nhau để tuần tự hóa các đối tượng trong PHP:
- Phương pháp ma thuật
4 vàarray[6] { [0]=> string[3] "red" [1]=> string[5] "green" [2]=> string[4] "blue" [3]=> string[4] "pink" [4]=> string[6] "violet" [5]=> string[6] "yellow" }
5array[6] { [0]=> string[3] "red" [1]=> string[5] "green" [2]=> string[4] "blue" [3]=> string[4] "pink" [4]=> string[6] "violet" [5]=> string[6] "yellow" }
- Giao diện
6array[6] { [0]=> string[3] "red" [1]=> string[5] "green" [2]=> string[4] "blue" [3]=> string[4] "pink" [4]=> string[6] "violet" [5]=> string[6] "yellow" }
Theo Nikita, cả hai tùy chọn này đều có vấn đề dẫn đến mã phức tạp và không đáng tin cậy. Bạn có thể đi sâu vào chủ đề này trong RFC. Ở đây tôi chỉ đề cập rằng cơ chế tuần tự hóa mới sẽ ngăn chặn các vấn đề này bằng cách cung cấp hai phương pháp ma thuật mới,
array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
7 và array[6] {
[0]=>
string[3] "red"
[1]=>
string[5] "green"
[2]=>
string[4] "blue"
[3]=>
string[4] "pink"
[4]=>
string[6] "violet"
[5]=>
string[6] "yellow"
}
8, kết hợp hai cơ chế hiện có.Đề xuất này được thông qua với 20 đến 7 phiếu bầu.
Khấu hao
Các chức năng/chức năng sau đây sẽ không được dùng với Php 7.4. Để biết danh sách các khoản khấu hao toàn diện hơn, hãy xem Ghi chú nâng cấp PHP 7.4.
Thay đổi mức độ ưu tiên của toán tử nối
Hiện tại, trong php, các nhà khai thác số học của php+và và--và các nhà khai thác số học, và các trò chơi. Toán tử chuỗi được kết hợp trái và có cùng mức độ [đọc thêm về ưu tiên toán tử].
Ví dụ, hãy xem xét dòng sau:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
1Trong Php 7.3, mã này tạo ra cảnh báo sau:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
2Điều này bởi vì sự kết hợp được đánh giá từ trái sang phải. Nó giống như viết mã sau:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
3RFC này đề xuất thay đổi mức độ ưu tiên của các nhà khai thác, đưa ra. Ưu tiên thấp hơn so với các toán tử+và và các toán tử, do đó, các phép bổ sung và phép trừ sẽ luôn được thực hiện trước khi kết hợp chuỗi. Dòng mã đó phải tương đương với các điều sau:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
4Đây là một đề xuất hai bước:
- Bắt đầu từ phiên bản 7.4, PHP sẽ phát ra thông báo không nhận được khi gặp phải biểu thức chưa được khám phá với các chương trình++, và và.
- Sự thay đổi thực tế của sự ưu tiên của các toán tử này nên được thêm vào với PHP 8.
Cả hai đề xuất đã được phê duyệt với phần lớn phiếu bầu.
Khởi hành toán tử ternary liên kết trái
Trong PHP, toán tử ternary, không giống như nhiều ngôn ngữ khác, là liên kết trái. Theo Nikita Popof, điều này có thể gây nhầm lẫn cho các lập trình viên chuyển đổi giữa các ngôn ngữ khác nhau.
Hiện tại, trong PHP, mã sau là chính xác:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
5Nó được giải thích là:
Parse error: syntax error, unexpected '...' [T_ELLIPSIS], expecting ']' in /app/spread-operator.php on line 3
6Và điều này có thể dẫn đến lỗi vì nó có thể không phải là những gì chúng ta dự định làm. Vì vậy, RFC này đề xuất từ chối và loại bỏ việc sử dụng tính liên kết trái cho các nhà khai thác ternary và các nhà phát triển lực lượng sử dụng dấu ngoặc đơn.
Đây là một đề xuất hai bước khác:
- Bắt đầu từ Php 7.4, các ternaries lồng nhau mà không sử dụng rõ ràng dấu ngoặc đơn sẽ đưa ra cảnh báo phản đối.
- Bắt đầu từ Php 8.0, sẽ có lỗi thời gian chạy biên dịch.
Đề xuất này đã được phê duyệt với 35 đến 10 phiếu.
Php 7.4 có nghĩa là gì đối với người dùng WordPress?
PHP là ngôn ngữ lập trình phía máy chủ được sử dụng rộng rãi nhất trên web. Theo W3Techs, tính đến ngày 2 tháng 12 năm 2019, việc sử dụng PHP được sử dụng bởi 78,9% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ mà họ có thể phát hiện.
Thật không may, PHP 5 vẫn được sử dụng bởi 44,0% tất cả các trang web có ngôn ngữ lập trình phía máy chủ đã biết. Nếu bạn thêm số lượng người dùng vẫn sử dụng Php 7.0 và 7.1, thì hóa ra phần lớn các trang web đang chạy các phiên bản PHP không được hỗ trợ.
Theo trang chính thức & NBSP; WordPress, khi viết bài này, một số lượng lớn 64% của tất cả các trang web WordPress đang chạy các phiên bản không được hỗ trợ của PHP. Chỉ có hơn 13% một chút đang sử dụng Php 7.3. Và phiên bản mới nhất, Php 7.4, thậm chí còn xuất hiện. Bạn có thể thấy rằng phần lớn người dùng, trên 23%, vẫn đang chạy trên PHP 5.6.
Chúng tôi khuyên bạn nên yêu cầu máy chủ của bạn cho phiên bản PHP được hỗ trợ, tốt nhất là theo yêu cầu chính thức của WordPress. Theo văn bản này, tháng 5 năm 2019, WordPress yêu cầu:
- Php phiên bản 7.3 trở lên.
- MySQL phiên bản 5.6 trở lên hoặc Mariadb phiên bản 10.1 trở lên.
- Hỗ trợ HTTPS
Hiệu suất Php 7
Các số trên đặc biệt không khuyến khích đến từ quan điểm hiệu suất, như Php 7 đã cho thấy là & nbsp; nhanh hơn đáng kể. Dưới đây là một vài chỉ số:
- Php & nbsp; điểm chuẩn & nbsp; cho thấy PHP 7 cho phép hệ thống thực hiện gấp đôi số yêu cầu mỗi giây so với PHP 5.6, ở gần một nửa độ trễ.
- Christian Vigh cũng đã xuất bản A & NBSP; PHP Performance So sánh & NBSP; trong đó ông thấy rằng & NBSP; Php 5.2 chậm hơn 400% so với Php 7.
- Andrei Avram đã thấy thời gian thực hiện nhanh hơn và ít sử dụng bộ nhớ trong Php 7.4 câu của Php 7.3
- Phoronix đã thực hiện một số bài kiểm tra điểm chuẩn sớm với Php 7.4 alpha và thấy rằng nó nhanh hơn một chút so với Php 7.3.
Đã nâng cấp trang web @kinsta của tôi lên PHP 7.4 và nó giống như nhanh hơn 10 lần. Woot!
- Ronald Huereca [@ronaldhuereca] ngày 2 tháng 12 năm 2019
Chúng tôi đã chạy các điểm chuẩn hiệu suất PHP của riêng mình với Php 7.3. Chúng tôi đã thấy rằng WordPress 5.0 trên PHP 7.3 có thể thực hiện gần gấp ba lần so với nhiều giao dịch [yêu cầu] mỗi giây so với Php 5.6. Chúng tôi sẽ sớm phát hành điểm chuẩn Php 7.4!We’ll be releasing PHP 7.4 benchmarks soon!
- WordPress 5.0 Php 5.6 Điểm chuẩn: 91,64 Req/giây
- WordPress 5.0 Php 7.0 Kết quả điểm chuẩn: 206.71 Req/giây
- WordPress 5.0 Php 7.1 Kết quả điểm chuẩn: 210,98 REQ/SEC
- WordPress 5.0 & nbsp; Php 7.2 Kết quả điểm chuẩn: 229,18 & nbsp; req/sec & nbsp;
- WordPress 5.0 & nbsp; Php 7.3 Kết quả điểm chuẩn: 253.20 Req/giây & nbsp; 🏆 🏆PHP 7.3 benchmark results: 253.20 req/sec 🏆
Nhiều người chậm cập nhật đơn giản chỉ vì thời gian liên quan đến việc kiểm tra mới tất cả các plugin và chủ đề của bên thứ ba của họ để đảm bảo chúng hoạt động đúng. .
Kiểm tra phiên bản PHP của bạn
Không chắc bạn đang chạy phiên bản PHP nào? Một trong những cách dễ nhất để kiểm tra là sử dụng một công cụ như & nbsp; pingdom & nbsp; hoặc google chrome devtools. Tiêu đề yêu cầu HTTP đầu tiên & NBSP; thường sẽ hiển thị cho bạn phiên bản.
Điều này phụ thuộc vào máy chủ không sửa đổi giá trị tiêu đề & nbsp; ____ 79. Tuy nhiên, nhiều người làm vì lý do bảo mật [bao gồm cả Kinsta]. Nếu vậy, bạn có thể không thấy phiên bản PHP của bạn. Trong trường hợp đó, nếu bạn đang chạy WordPress 5.2 trở lên, có một công cụ sức khỏe trang web mới mà bạn có thể sử dụng. Truy cập vào các công cụ của người dùng trên mạng → Trang web Sức khỏe Trang web → Thông tin trực tuyến và trong phần máy chủ của bạn, bạn sẽ tìm thấy phiên bản PHP máy chủ của bạn.
Ngoài ra, bạn có thể cài đặt một plugin miễn phí như thông tin phiên bản sẽ hiển thị cho bạn một số thông tin máy chủ cơ bản trong phần chân trang của bảng điều khiển quản trị viên WordPress của bạn. Một vài cách khác để xem phiên bản PHP của bạn bao gồm tải lên tệp qua FTP hoặc chỉ đơn giản là liên hệ với máy chủ của bạn và hỏi.
Cập nhật lên Php 7.4
Phiên bản cuối cùng của Php 7.4 hiện có sẵn tại Kinsta. & NBSP; Ngoài ra, bạn có thể kiểm tra trang web WordPress của mình cục bộ & NBSP; hoặc kiểm tra các tập lệnh của bạn trong một môi trường như & nbsp; Docker, cho phép bạn kiểm tra các phiên bản PHP khác nhau từ dòng lệnh. Alternatively, you could test your WordPress site locally or check your scripts in an environment like Docker, which allows you to test different versions of PHP from the command line.
Cách dễ nhất để bắt đầu thử nghiệm là & nbsp; tạo môi trường dàn dựng & nbsp; vì điều này sẽ giống với trang web sản xuất trực tiếp của bạn. Trong bảng điều khiển Mykinsta, nhấp vào trang web của bạn và thay đổi môi trường thành dàn.
Sau đó, trong menu Công cụ trực tuyến, thay đổi công cụ PHP của bạn thành Php 7.4. Sau đó, bạn có thể bắt đầu kiểm tra để đảm bảo khả năng tương thích của mã, các plugin của bên thứ ba và chủ đề.
Như với các phiên bản trước của PHP, tính năng PHP tự phục hồi của chúng tôi hỗ trợ đầy đủ PHP 7.4. Nếu PHP đi xuống vì bất kỳ lý do gì, chúng tôi sẽ tự động khởi động lại nó. Nếu khởi động lại không khắc phục sự cố, hệ thống giám sát của chúng tôi sẽ cảnh báo nhóm Sysadmin của chúng tôi để điều tra nguyên nhân của vấn đề.
Xem chi tiết liên quan đến phát hành Php 7.4 tại Kinsta.
Cài đặt và chạy Php 7.4 trên Docker
Bạn muốn kiểm tra trên Docker? & NBSP; May mắn thay, bạn không cần phải biên dịch và định cấu hình Php 7.4 theo cách thủ công. Nếu bạn đã cài đặt Docker trên hệ thống của mình, bạn chỉ cần cài đặt hình ảnh docker PHP-FPM 7.4 không chính thức và chạy các thử nghiệm của bạn từ dòng lệnh trong vài giây.
Nếu bạn thích chạy mã PHP 7.4 của mình trong trình duyệt, bạn cũng cần cài đặt hình ảnh nginx hoặc Apache. Nhưng không phải lo lắng. Chỉ cần làm theo hướng dẫn của nhà phát triển. Sao chép và dán các lệnh từ trang hình ảnh Docker vào công cụ dòng lệnh của bạn và bạn đã sẵn sàng để đi.
Php 7.4 là bản phát hành nhỏ mới nhất giúp PHP nhanh hơn và đáng tin cậy hơn. 🚀SCECK OUT DEEP ĐÀO TẠO CỦA CHÚNG TÔI vào các tính năng mới! Nhấp để tweetClick to Tweet
Bản tóm tắt
Trong bài đăng này, chúng tôi đã đề cập đến một số lượng tốt các thay đổi và bổ sung mà chúng tôi có thể mong đợi với việc phát hành Php 7.4. Nếu bạn đang tìm kiếm danh sách đầy đủ các tính năng, cùng với tài liệu chính thức của RFC, hãy xem các tài nguyên sau:
- Php 7.4 yêu cầu nhận xét
- Ghi chú nâng cấp Php 7.4
- Php 7.4 Nhiệm vụ chuẩn bị
Chúng tôi sẽ cập nhật cho bạn tất cả các thông tin mới nhất liên quan đến Php 7.4. Nếu bạn là khách hàng Kinsta, bạn đã có thể bắt đầu chuyển các trang web WordPress của mình sang phiên bản mới nhất.
Bạn đã sẵn sàng để cài đặt và kiểm tra các tính năng PHP sắp tới chưa? cái nào là sở thích của bạn? Chia sẻ suy nghĩ của bạn với chúng tôi trong các ý kiến dưới đây.
Tiết kiệm thời gian, chi phí và tối đa hóa hiệu suất trang web với:
- Trợ giúp ngay lập tức từ các chuyên gia lưu trữ WordPress, 24/7.
- Tích hợp doanh nghiệp CloudFlare.
- Khán giả toàn cầu với 35 trung tâm dữ liệu trên toàn thế giới.
- Tối ưu hóa với giám sát hiệu suất ứng dụng tích hợp của chúng tôi.
Tất cả điều đó và nhiều hơn nữa, trong một kế hoạch không có hợp đồng dài hạn, di cư hỗ trợ và một người được bảo đảm trong 30 ngày. Kiểm tra các kế hoạch của chúng tôi hoặc nói chuyện với bán hàng để tìm kế hoạch phù hợp với bạn.