PHP 8.2 có ổn định không?

PHP8. 2. Nó là một bản phát hành nhỏ so với 8. 0 và 8. 1. Điều này có thể một phần là do sự ra đi của Nikita Popov với tư cách là một trong những người đóng góp quan trọng nhất cho ngôn ngữ PHP. Ngôn ngữ PHP có rất nhiều người bảo trì và không phải do một người xây dựng, nhưng Nikita là một trong những người tích cực nhất trong số họ. Các tính năng như kiểu kết hợp, thuộc tính đã nhập, đối số được đặt tên và hàm mũi tên, để đặt tên cho một số, đều được Nikita thêm vào

Bài đăng trên blog này là một đoạn trích được chỉnh sửa một chút từ Front Line PHP, một cuốn sách được thiết kế đẹp mắt của Spatie về cách xây dựng các ứng dụng hiện đại bằng PHP 8. 2. Nó bao gồm hệ thống loại của PHP, phân tích tĩnh, cách sử dụng các tính năng mới nhất và hơn thế nữa

Tin tức về sự ra đi đã vang vọng khắp cộng đồng PHP và một vấn đề quan trọng đã phải được thừa nhận. Các ngôn ngữ khác như JavaScript/TypeScript, C# và Java được hỗ trợ bởi các công ty lớn với nhiều tài sản theo ý của họ. Trái ngược với nhóm cốt lõi PHP, chủ yếu dựa vào các tình nguyện viên và một số công ty nhỏ để trả tiền cho một số người đóng góp

Tương lai không rõ ràng cho ngôn ngữ PHP do những tin tức gần đây và việc thiếu các nhà phát triển cốt lõi được trả lương là động lực chính để thành lập Quỹ PHP vào tháng 11 năm 2021. Tuyên bố sứ mệnh của họ như sau

PHP Foundation sẽ là một tổ chức phi lợi nhuận với sứ mệnh đảm bảo sự trường tồn và thịnh vượng của ngôn ngữ PHP

Quỹ PHP được hỗ trợ bởi các công ty và cá nhân trong cộng đồng PHP và sẽ tài trợ cho các nhà phát triển làm việc trên lõi PHP để giữ cho ngôn ngữ này phát triển như những năm trước

Tôi có thể tự hào nói rằng Spatie đang tài trợ cho Quỹ PHP và bạn cũng có thể làm như vậy, chỉ bằng một tách cà phê

PHP8. 2 phát hành ngay trong năm đầu tiên của PHP Foundation, và một số cơ cấu tổ chức phải được thiết lập. Các nhà phát triển đầu tiên đã được chọn và cuối cùng được thuê để làm việc cho nền tảng trong giai đoạn này. Những điều này mất một thời gian, vì vậy chúng tôi xem xét PHP 8. 2 phát hành một trong những bản phát hành nhỏ hơn vì những thứ quan trọng đã được di chuyển trong nhóm cốt lõi PHP. May mắn thay, chúng tôi biết điều này sẽ thay đổi nhờ vào PHP Foundation. Tương lai tươi sáng cho PHP

Cùng đến với một số cải tiến có trong PHP 8. 2

thuộc tính động

PHP luôn có bản chất động. Cộng đồng đã quyết định rằng một số tính năng sớm nhất của ngôn ngữ là quá năng động trong tự nhiên trong những năm qua. Một ví dụ tuyệt vời về tính năng động như vậy là các thuộc tính động. Hiện được phép đặt thuộc tính trên bất kỳ đối tượng nào không tồn tại trong lớp. Ví dụ: điều này hoàn toàn hợp lệ trong PHP

class User{}

$user = new User[];
$user->email = 'info@spatie.be';

Các thuộc tính động cung cấp mức độ linh hoạt chưa từng thấy nhưng cũng mở ra cơ hội cho hành vi không mong muốn và do đó, các lỗi khó sửa. Giả sử bạn đổi tên thuộc tính ở đây. Sau đó, bạn nên nhớ tất cả những nơi khác mà thuộc tính này đang được sử dụng vì nó cần được đổi tên. Phân tích tĩnh và một IDE có thể hỗ trợ bạn một chút tại đây. Nhưng việc xác định các thuộc tính trong lớp của bạn sẽ luôn cung cấp thông tin chi tiết hơn về các công cụ này hơn là thiết lập chúng một cách linh hoạt. Và có lẽ bạn cũng sẽ viết ít lỗi hơn rất nhiều

Hơn nữa, việc đọc một thuộc tính không xác định sẽ cung cấp cho bạn phản hồi rằng đã xảy ra sự cố vì bạn sẽ nhận được cảnh báo. Trong khi việc ghi vào một thuộc tính không xác định có thể được thực hiện mà không có bất kỳ cảnh báo nào. Tôi luôn muốn có một hệ thống loại ổn định, nơi tôi chắc chắn rằng các thuộc tính tồn tại bởi vì tôi xác định chúng một cách chặt chẽ. Thuộc tính động vi phạm quy tắc này và đó là lý do tại sao tôi không sử dụng chúng

Bắt đầu với PHP 8. 2, các thuộc tính động không được dùng nữa. Ví dụ trên bây giờ sẽ đưa ra một cảnh báo không dùng nữa. Lưu ý rằng khi bạn đã triển khai các phương thức

"Hello there, {$name}"
7 hoặc
"Hello there, {$name}"
8 kỳ diệu, việc nhận và đặt các thuộc tính động trên một đối tượng vẫn hoàn toàn hợp lệ

Hơn nữa, bạn vẫn có thể kích hoạt chức năng của các thuộc tính động bằng cách thêm thuộc tính

"Hello there, {$name}"
9 vào lớp

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';

Thuộc tính này được kế thừa bởi tất cả các phần tử con của lớp và được thêm vào theo mặc định cho

"Hello there, ${name}"
0. Vì vậy, việc mở rộng lớp học của bạn từ
"Hello there, ${name}"
0 cũng sẽ kích hoạt hành vi năng động này

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';

Cuối cùng, các lớp chỉ đọc không bao giờ có các thuộc tính động. Thêm thuộc tính

"Hello there, {$name}"
9 vào lớp chỉ đọc sẽ gây ra lỗi

Ngừng sử dụng trong phép nội suy chuỗi

Nội suy chuỗi là một tính năng tiện lợi cho phép bạn sử dụng các biến trong chuỗi như thế này

"Hello there, {$name}"

Bạn có biết bạn cũng có thể làm điều này

"Hello there, ${name}"

tôi chắc chắn đã không. Mặc dù cú pháp gần như giống nhau, nhưng nó hoạt động hoàn toàn khác. Do những khác biệt về ngữ nghĩa và đủ tùy chọn để sử dụng phép nội suy chuỗi, tính năng này không được dùng nữa khi phát hành PHP 8. 2

Thông số nhạy cảm

PHP cho phép bạn xem dấu vết ngăn xếp và tất cả các tham số được liên kết với từng khung ngăn xếp khi có sự cố. Điều này cực kỳ hữu ích để gỡ lỗi nhưng có thể là thảm họa đối với dữ liệu nhạy cảm. Giả sử bạn có một chức năng như thế này

"Hello there, {$name}"
1

Mật khẩu hiện được bao gồm trong theo dõi ngăn xếp được tạo bởi ngoại lệ, có nghĩa là nó có sẵn cho bất kỳ ai xem khi bạn định cấu hình sai ứng dụng của mình. Khi bạn đã định cấu hình dịch vụ theo dõi lỗi bên ngoài mà bạn gửi dấu vết ngăn xếp của mình, mật khẩu sẽ được gửi đến dịch vụ bên ngoài cùng với một loạt dữ liệu gỡ lỗi mà bạn muốn tránh

Bạn có thể dễ dàng kiểm tra điều này bằng cách bắt lỗi và kết xuất các đối số từ khung ngăn xếp đầu tiên

"Hello there, {$name}"
2

Cái nào sẽ xuất ra hiệu quả như sau

"Hello there, {$name}"
3

Trong PHP8. 2, một thuộc tính

"Hello there, ${name}"
3 đã được thêm vào, thay thế tham số trong dấu vết ngăn xếp. Bạn có thể sử dụng nó như thế này

"Hello there, {$name}"
5

Bây giờ đầu ra từ việc bắt ngoại lệ trông như thế này

"Hello there, {$name}"
6

Các nhà phát triển PHP đã chọn không thay thế tham số bằng một chuỗi đáng ngờ như 'hidden', nhưng họ đã tạo một DTO mới,

"Hello there, ${name}"
4. DTO này cho phép bạn truy xuất giá trị nhạy cảm ban đầu trong mã của mình khi điều đó được yêu cầu. Tuy nhiên, thật khó để vô tình làm lộ giá trị cho người dùng ứng dụng của bạn hoặc dịch vụ bên ngoài

Hằng số trong tính trạng

Trước PHP 8. 2, không được phép thêm hằng số vào đặc điểm. Đó là sự khác biệt về ngôn ngữ vì các đặc điểm có quyền truy cập vào các hằng số của các lớp mà chúng đang được sử dụng. Nhưng bạn hoàn toàn không thể định nghĩa rằng một hằng số sẽ tồn tại trong một lớp, may mắn là điều này đã được sửa

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
0

Công cụ sửa đổi không ghi PCRE

Một bổ sung nhỏ cho PHP 8. 2 tiện ích mở rộng regex là công cụ sửa đổi không chụp sẽ chỉ chụp các nhóm chụp được đặt tên. Bạn có thể thêm công cụ sửa đổi này bằng cách nối thêm

"Hello there, ${name}"
5 vào cuối biểu thức chính quy của mình. Giả sử bạn muốn ghi lại chữ viết tắt trong các số được viết này.
"Hello there, ${name}"
6,
"Hello there, ${name}"
7,
"Hello there, ${name}"
8, v.v. Bạn có thể viết một regex như thế này

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
1

Với các nhóm chụp được đặt tên, bạn có thể dễ dàng đặt tên cho nhóm mong muốn

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
2

Sử dụng công cụ sửa đổi không bắt giữ, PHP sẽ chỉ bao gồm nhóm được đặt tên

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
3

Tiện ích mở rộng ngẫu nhiên

PHP8. 2 đi kèm với một tiện ích mở rộng mới, bổ sung một cách thân thiện với OOP hơn để làm việc với việc tạo số ngẫu nhiên và các hoạt động ngẫu nhiên khác. Một lớp

"Hello there, ${name}"
9 mới đã được thêm vào để kích hoạt chức năng. Ví dụ, bạn có thể xáo trộn một chuỗi như thế này

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
4

Hoặc xáo trộn một mảng

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
5

Lấy một số trong một khoảng thời gian nhất định có thể được thực hiện như vậy

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
6

Một lợi ích bổ sung là bạn có thể cung cấp trình tạo số giả ngẫu nhiên [PRNG] cho trình tạo ngẫu nhiên. PHP có một số công cụ PRNG được tích hợp sẵn.

"Hello there, {$name}"
10,
"Hello there, {$name}"
11,
"Hello there, {$name}"
12 và
"Hello there, {$name}"
13. Lưu ý rằng chỉ công cụ cuối cùng phù hợp để tạo số ngẫu nhiên bằng mật mã. Mẫu động cơ này cho phép nhanh chóng bổ sung thêm các động cơ an toàn/nhanh hơn trong tương lai. Bạn thậm chí có thể tạo công cụ của mình để sử dụng với bộ ngẫu nhiên hóa

Bạn có thể đặt công cụ cho bộ ngẫu nhiên như vậy

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
7

Kết thúc, giờ đây bạn cũng có thể đặt hạt giống của công cụ đang được sử dụng cho bộ ngẫu nhiên hóa. Hạt giống chủ yếu là một giá trị ngẫu nhiên mà từ đó các giá trị ngẫu nhiên khác được lấy. Khi bạn chạy ví dụ này hai lần, số được tạo sẽ khác nhau mỗi lần

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
8

Khi bạn đặt giá trị cho hạt giống bằng cách sử dụng công cụ

"Hello there, {$name}"
10, thì giá trị được tạo ngẫu nhiên mỗi lần sẽ giống nhau

#[AllowDynamicProperties]
class User{}

$user = new User[];
$user->email = 'info@spatie.be';
9

Hành vi này có thể hữu ích trong môi trường thử nghiệm hoặc cục bộ, nơi sẽ hữu ích nếu việc khởi động lại một đoạn mã trong quá trình gỡ lỗi sẽ mang lại kết quả giống nhau mỗi lần. Ngay cả khi các hoạt động ngẫu nhiên hóa đang được sử dụng

Các loại hình thức bình thường khác nhau

Các loại liên kết và giao lộ đã thêm rất nhiều lợi ích cho ngôn ngữ. Với việc giới thiệu các loại biểu mẫu bình thường phân biệt [các loại DNF], bạn có thể xây dựng các loại phức tạp hơn nữa. Các loại DNF đã được thêm vào trong PHP 8. 2, cho phép bạn thực hiện các liên kết giao nhau và các loại đơn lẻ. Điều này cho phép bạn thêm kiểm tra loại chi tiết hơn vào mã của mình

Hãy xem ví dụ chúng ta đã có trước đó. Điều gì sẽ xảy ra nếu chúng ta có một giao diện như thế này

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
0

Một lớp

"Hello there, {$name}"
15 hiện có thể triển khai lớp này

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
1

Bây giờ chúng ta có thể mở rộng loại hàm URL như sau

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
2

Hàm hiện cho phép các đối tượng triển khai cả

"Hello there, {$name}"
16 và
"Hello there, {$name}"
17 hoặc các đối tượng triển khai giao diện
"Hello there, {$name}"
18 duy nhất

Trường hợp sử dụng nổi bật nhất cho các loại DNF có thể sẽ làm cho các loại giao lộ trở nên vô giá trị

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
3

Các loại DNF phải tuân thủ các quy tắc của biểu mẫu DNF, điều đó có nghĩa là bạn chỉ có thể xây dựng các loại dưới dạng kết hợp các giao điểm và các loại đơn lẻ. Điều này có nghĩa là một loại như thế này không được phép

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
4

Nó có thể được viết lại thành một tập hợp các giao điểm như sau

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
5

lớp chỉ đọc

Đôi khi bạn muốn tạo một DTO bất biến hoàn chỉnh chỉ chứa các thuộc tính chỉ đọc. Trong trường hợp này, bạn có thể tạo một lớp và định nghĩa tất cả các thuộc tính là chỉ đọc

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
6

Làm điều này có thể khá tốn thời gian và mỗi khi bạn thêm một thuộc tính mới, bạn nên nhớ đặt nó ở chế độ chỉ đọc. PHP8. 2 giới thiệu một giải pháp tốt hơn đáng kể cho vấn đề này. các lớp chỉ đọc. Với các lớp chỉ đọc, bạn khai báo một lớp là chỉ đọc một lần và tất cả các thuộc tính bên trong nó sẽ chỉ đọc từ thời điểm đó trở đi

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
7

Các thuộc tính riêng lẻ của lớp chỉ đọc hoạt động như các thuộc tính chỉ đọc, vì vậy tất cả các hành vi mà chúng tôi đã mô tả trước đó vẫn được áp dụng. Hơn nữa, cũng không thể thêm thuộc tính tĩnh vào lớp chỉ đọc, dẫn đến lỗi nghiêm trọng

Bạn chỉ có thể tạo một lớp chỉ đọc mở rộng từ một lớp chỉ đọc. Quy tắc này ngụ ý rằng không được phép tạo một lớp chỉ đọc mở rộng từ một lớp không chỉ đọc và ngược lại khi bạn tạo một lớp không chỉ đọc mở rộng từ một lớp chỉ đọc. Cả hai trường hợp này sẽ dẫn đến một lỗi nghiêm trọng

Cải tiến cho enums

Khi enums được giới thiệu, không thể tìm nạp các thuộc tính

"Hello there, {$name}"
19 và
"Hello there, {$name}"
20 từ một enum trong một biểu thức không đổi. Chúng tôi đã tóm tắt một số trường hợp biểu thức không đổi trong trường hợp này

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
8

Kể từ PHP 8. 2, tất cả các cú pháp này đều hợp lệ và sẽ không gây ra lỗi nữa

Ngừng sử dụng trong cú pháp có thể gọi được hỗ trợ một phần

PHP8. 2 sẽ không dùng một số cú pháp có thể gọi được vì chúng không nhất quán

class User extends stdClass{}

$user = new User[];
$user->email = 'info@spatie.be';
9

Các cú pháp này có thể được sử dụng với loại

"Hello there, {$name}"
21 và các hàm
"Hello there, {$name}"
22 và
"Hello there, {$name}"
23. Điều kỳ lạ là những cú pháp này có thể được sử dụng trong một số trường hợp nhưng không phải với cú pháp
"Hello there, {$name}"
24 như thế này

"Hello there, {$name}"
0

Hơn nữa, các cú pháp này phụ thuộc vào ngữ cảnh. Các loại đằng sau

"Hello there, {$name}"
25 và
"Hello there, {$name}"
26 có thể thay đổi tùy thuộc vào vị trí mà chúng được gọi, điều này có thể dẫn đến hành vi không mong muốn khi chúng gọi các phương thức riêng tư

Đó là lý do tại sao chúng không được dùng với loại

"Hello there, {$name}"
21 và các hàm
"Hello there, {$name}"
22 và
"Hello there, {$name}"
23. Cập nhật ví dụ trên có thể được thực hiện nhanh chóng như vậy

"Hello there, {$name}"
1

Các cú pháp có thể gọi khác như thế này vẫn còn hiệu lực để sử dụng

"Hello there, {$name}"
2

Một chức năng để thiết lập lại mức sử dụng cao nhất của bộ nhớ

Trong PHP, có thể đo mức sử dụng bộ nhớ cao nhất. Trước đây không bao giờ có thể đặt lại đỉnh này, vì vậy việc đo đỉnh thứ hai sau đỉnh đầu tiên là không thể

Ví dụ: khi bạn tạo hai mảng và muốn đo mức sử dụng bộ nhớ tối đa cho mảng thứ hai, giá trị sẽ bằng với mức sử dụng bộ nhớ tối đa từ khi tạo mảng đầu tiên

"Hello there, {$name}"
3

Hàm

"Hello there, {$name}"
30 đã được thêm vào trong PHP 8. 2 cho phép bạn đặt lại đỉnh này để bạn có thể đo lại

"Hello there, {$name}"
4

Phương pháp
"Hello there, {$name}"
31

PHP8. 2 thêm một phương thức mới vào tiện ích mở rộng mysqli cho phép bạn chuẩn bị, liên kết các tham số và thực thi câu lệnh SQL trong một phương thức. Trước đây, rất nhiều thao tác được yêu cầu để thực hiện một truy vấn

"Hello there, {$name}"
5

Mã này bây giờ có thể được viết lại như vậy

"Hello there, {$name}"
6

kết thúc

Mặc dù PHP 8. 2 là một bản phát hành nhỏ hơn bình thường, nó vẫn có một số tính năng hay và sửa lỗi. Để tìm hiểu thêm về PHP hiện đại, hãy xem Front Line PHP, một cuốn sách được thiết kế đẹp mắt về cách xây dựng các ứng dụng hiện đại bằng PHP 8. 2. Nó bao gồm hệ thống kiểu của PHP, phân tích tĩnh, cách sử dụng các tính năng mới nhất, v.v.

Phiên bản PHP nào ổn định?

PHP8. 3 là nhánh phát triển tích cực của các phiên bản PHP. Đó là mục tiêu hiện tại cho các RFC mới và dự kiến ​​sẽ được phát hành vào cuối năm 2023

Phiên bản PHP 8 có ổn định không?

Kết luận. Điều cần thiết là luôn cập nhật PHP từ quan điểm bảo mật. Hiệu suất PHP nhanh hơn rất quan trọng ngoài bảo mật vì người dùng cuối đang trở nên ít chịu đựng hơn đối với các trang web và ứng dụng chậm. Theo nhiều điểm chuẩn khác nhau trên web, PHP 8 nhanh hơn đáng kể so với PHP 7 .

PHP 8 có an toàn hơn không?

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 .

php8 có nhanh hơn không?

PHP 8. 0 và 8. 1 đã được chứng minh là nhanh hơn trên toàn diện khi nói đến WordPress, WooC Commerce và Tải xuống kỹ thuật số dễ dàng . Nếu bạn đang sử dụng WordPress để chạy bất kỳ trang web nào của mình, bạn nên lên kế hoạch chuyển sang PHP 8. 0 trở lên càng sớm càng tốt.

Chủ Đề