PHP 8.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 named arguments, JIT, union types, attributes, constructor property match expression, promotion, nullsafe operator và các cải tiến trong kiểu hệ thống, xử lý lỗi và tính nhất quán.
PHP 8
WordPress php 8
Hướng dẫn nâng cấp PHP 8 cho website WordPress
Chạy các trang Web của bạn trên PHP 7.1 hoặc phiên bản thấp hơn sẽ khiến chúng gặp rủi ro về các vấn đề bảo mật. Không chỉ vậy, bạn cũng sẽ bỏ lỡ các cải tiến về hiệu suất của hệ thống trong các phiên bản PHP mới hơn. PHP 8 là một phiên bản PHP chính vừa được phát hành, có nghĩa là nó sẽ giới thiệu một số đổi thay đột phá, cũng như nhiều tính năng mới và cải tiến hiệu suất.
Bên cạnh những đổi thay đột phá, PHP 8 cũng mang đến một loạt các tính năng mới như trình biên dịch JIT (JIT Compiler), union types, attributes, v.v.
Php 8 wordpress
PHP là một hệ thống lớn cần được sửa chữa và cải tiến liên tục. Mỗi phiên bản mới đều đi kèm với các bản sửa lỗi bảo mật trên các phiên bản trước. Vì thế, bạn nên tiêu dùng các phiên bản PHP mới nhất để ngăn chặn các cuộc tấn công mạng và bảo vệ tài sản, dữ liệu của bạn.
Php 8 wordpress
Với bản chất được định kiểu động của PHP, có rất nhiều trường hợp mà kiểu liên hợp (union types) có thể hữu ích. Các union types là một tập hợp của hai hoặc nhiều kiểu cho biết rằng một trong hai kiểu đó có thể được tiêu dùng.
public function foo(Foo|Bar $input): int|float;
Lưu ý rằng void
không từng có thể là một phần của union type, vì nó chỉ ra ‘không có giá trị trả lại nào cả’. Hơn nữa, nullable
có thể được viết bằng cách tiêu dùng |null
, hoặc bằng cách tiêu dùng ký hiệu ?
:
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
Laravel php 8
Truyền tham số theo tên gọi – function PHP 8
Việc một function có nhiều tham số (với mình là từ 3 tham số trở nên), có thể khiến developer lúng túng khi tiêu dùng vì không nhớ rõ ý nghĩa của từng tham số, cũng như thứ tự truyền của chúng.
Ví dụ, function mkdir()
(function giúp tạo thư mục) trong PHP có 4 tham số lần lượt là:
$directory
: Bắt buộc, là đường dẫn để tạo thư mục$permissions
: Không bắt buộc, là khả năng truy cập vào thư mục (kiểu 0777, hay 0655), mặc định là 0777.$recursive
: Không bắt buộc, có cho phép tạo thư mục con ngay cả khi thư mục cha không tồn tại (cho phép tạo kiểu đệ quy), mặc định làfalse
.$context
: Không bắt buộc, còn ý nghĩa là gì thì mình cũng chẳng hiểu lắm, chưa từng dùng đến tham số này.
Các vấn đề mà một developer có thể gặp phải khi tiêu dùng mkdir()
đó là:
- Đôi khi không nhớ rõ thứ tự của 2 tham số
$permissions
và$recursive
, không biết tham số nào được viết trước. - Nếu muốn đổi giá trị của tham số
$recursive
từfalse
thànhtrue
, developer buộc phải truyền cả tham số$permissions
(vì$permissions
đứng trước$recursive
).
Cả hai vấn đề trên đều gây bất tiện khi tiêu dùng, để khắc phục nó, thì PHP cung cấp cú pháp mới cho phép truyền tham số theo tên gọi:
1
2
3
4
5
6
7
8
9
|
<?php // PHP 7.x mkdir ( './hello/world' , 0777, true); // PHP 8 mkdir (recursive: true, directory: './hello/world' ); // Hoặc mkdir ( './hello/world' , recursive: true); |
Lưu ý:
– Đây chỉ là cú pháp mới mà PHP 8 cung cấp để tiện tiêu dùng hơn khi cần, còn bạn vẫn có thể tiêu dùng cú pháp cũ bình thường trên phiên bản PHP 8 này.
– Tên tham số bạn không được phép “tự nghĩ ra” mà phải tuân theo tài liệu của PHP. Như trong ví dụ trên, recursive
và directory
là 2 tham số mà mình buộc phải tuân theo tài liệu mà PHP cung cấp.
Php 8 laravel
Trình biên dịch JIT trong PHP 8
Mặc dù không phải lúc nào là ưu tiên hàng đầu của webstie. Mình đã thực hiện các bài test của riêng mình trên các ứng dụng web ngoài đời thực và có vẻ như JIT không tạo ra nhiều khác biệt. Hiểu nhanh thì JIT (Just In Time) là một kỹ thuật được PHP tích hợp vào việc biên dịch code PHP thành mã máy, giúp PHP 8 đạt được hiệu năng cao gấp 1,5 – 2 lần so với PHP 7. Nhưng đừng vội mừng, hãy xem biểu đồ dưới đây và mình sẽ giải thích cho bạn hiểu:
- bench.php, micro_bech.php, N-body, Mandelbrot đều là các bài test trên ứng dụng PHP đơn giản.
- Các bài test còn lại, lần lượt test trên các ứng dụng PHP có độ phức tạp tăng dần.
- Đường màu đen, kẻ dọc ở biểu đồ trên là ngưỡng tối đa khi PHP không tiêu dùng JIT.
- Hướng dẫn chỉnh sửa widget wordpress.
Ứng dụng PHP đơn giản khi ứng dụng JIT mới có hiệu năng cao, còn các ứng dụng PHP phức tạp, tiêu dùng các framework, cms phổ biến như WordPress, Symfony (Chắc laravel cũng không ngoại lệ) thì tiêu dùng JIT lại không đem lại nhiều lợi ích. Thậm chí như trường hợp của Symfony khi ứng dụng JIT còn làm ứng dụng chạy chậm hơn so với lúc không ứng dụng.
Php8
Cập nhật khác trên PHP 8
ột số cập nhật điển hình khác trên PHP 8 như sau:
- Thay vì tiêu dùng PHP Doc để chú thích, PHP 8 đã cung cấp thêm cấu trúc metadata.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php // PHP 7 class PostsController { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get( $id ) { /* ... */ } } // PHP 8 class PostsController { #[Route( "/api/posts/{id}" , methods: [ "GET" ])] public function get( $id ) { /* ... */ } } |
- Toán tử @ vốn để “câm lặng lỗi” không còn được tiêu dùng ở PHP 8.
1
2
3
4
5
6
|
<?php // Khi thêm @ phía trước, nếu function có thực hiện lỗi cũng sẽ không báo lỗi // Nhưng đó đã là quá khứ rồi. // Ở PHP 8 vẫn báo lỗi bình thường @unlink( 'hello/world' ); |
- Cụm
try {} catch () {}
có thể không cần biến $exception trong catch.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php // PHP 7 try { 1/0; } catch (Exception) { // Sẽ báo lỗi cú pháp ở dòng này die ( 'Something wrong' ); } // PHP 8 try { 1/0; } catch (Exception) { // Chạy bình thường die ( 'Something wrong' ); } |
- Cho phép dấu phẩy ở cuối danh sách tham số.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?php // PHP 7 class Uri { private function __construct( ?string $scheme , ?string $user , ?string $pass , ?string $host , ?int $port , string $path , ?string $query , ?string $fragment // <-- Tham số cuối cùng không được phép có dấu phẩy ) { ... } } // PHP 8 class Uri { private function __construct( ?string $scheme , ?string $user , ?string $pass , ?string $host , ?int $port , string $path , ?string $query , ?string $fragment , // <-- Được phép viết dấu phẩy ở tham số cuối cùng ) { ... } } |
- Bổ sung một số function mới str_contains(), str_starts_with(), str_ends_with()
Hướng dẫn nâng cấp lên php 8
Để nâng cấp PHP 8 cần chuẩn bị những gì
Phiên bản PHP 8.0, nó có thể yêu cầu lập trình viên duyệt code lại khi có đổi thay. Vì thế, nhà đồng sáng lập, đồng thời cũng là chuyên gia tư vấn chính của PHP Consulting Company, Stefan Priebsch khuyên quý khách phải chuẩn bị nhiều trước khi chuyển đổi, do một số tính năng cũ sẽ bị loại bỏ khỏi phiên bản 8.0.
Điển hình như phiên bản PHP 8.0 không sẵn có các thành phần PHP-PSR, Phalcon 4, ionCube 10, Snuffleupagus, Memcache và SourceGuardian.
Một số phần mềm không tương thích với PHP 8.0:
- DSO: Mặc dù, Hosting cPanel hỗ trợ PHP8 nhưng trình xử lý DSO lại không được cPanel hỗ trợ với PHP 8.0.
- Các phần mở rộng của XMLRPC: Đã được chuyển sang PECL.
Điều kiện nâng cấp PHP 8
- Hosting, hosting wordpress tiêu dùng cPanel/ DirectAdmin và được trang bị tính năng cho phép tùy chọn phiên bản PHP (Select PHP Version).
- Tích hợp sẵn PHP 8.
- Theme và plugin của bạn tương thích tốt với PHP 8.
- Website của bạn đã được update lên phiên bản WordPress 5.6 hoặc cao hơn. Các phiên bản hosting wordpress thấp hơn chưa hỗ trợ PHP 8.
Nâng cấp PHP 8
Đầu tiên, các bạn truy cập vào cPanel/ DirectAdmin, tìm mục Select PHP Version và click vào đó.
Trong tab Extensions, các bạn lựa chọn PHP 8 trong mục Current PHP Version rồi click vào nút Set as current. Tiếp theo, thiết lập các extension (module) giống như hình bên dưới.
Extension có thể đổi thay tùy theo từng nhà cung cấp. Tuy nhiên, hãy kích hoạt hết những extension tương tự mà bạn thấy xuất hiện ở trên.
Lưu ý: các thiết lập module kể trên là tối ưu nhất dành cho mã nguồn WordPress, chúng chưa được kiểm nghiệm trên các mã nguồn khác
.
Chuyển qua tab Options, các bạn thiết lập các thông số
Các thông số tối đa của memory_limit
, post_max_size
và upload_max_filesize
có thể đổi thay tùy theo nhà cung cấp hosting giá rẻ. Nếu bạn được phép tùy chỉnh thông số nào, hãy cố gắng thiết lập nó giống như hình bên trên. Truy cập website của bạn và đánh giá xem giao diện cũng như các tính năng đã hoạt động bình thường hay chưa. Nếu rồi thì có nghĩa là các bạn đã nâng cấp PHP 8 thành công. Nếu có lỗi xảy ra, các bạn hãy đánh giá error_log
để xem theme hay plugin nào không tương thích. Trong trường hợp không thể khắc phục, các bạn chỉ cần chuyển về phiên bản PHP cũ là được.