Một số cải tiến của PHP version 8
- 29-06-2022
- Toanngo92
- 0 Comments
PHP 8.0 được phát hành ngày 26 tháng 11 năm 2020. Những thay đổi này làm cho PHP hoạt động dễ dàng hơn và không phức tạp. PHP 8.0 được coi là một bản cập nhật lớn của ngôn ngữ PHP. Nó có nhiều tính năng mới và tối ưu hóa bao gồm:
- Named arguments
- Attributes
- Constructor property promotion
- Union types
- Match expression
- Nullsafe operator
- Enhanced error handling, and type system
- Consistency
Mục lục
Named Arguments (Đối số được đặt tên)
Trong tính năng mới này, người dùng chỉ phải chỉ định các tham số bắt buộc và bỏ qua các tham số tùy chọn. Các arguments được tự ghi lại và không phụ thuộc vào trật tự sắp xếp.
Ví dụ về sự khác biệt giữa PHP 7.0 và 8.0
PHP 7 | PHP 8 |
htmlspecialchars($string, ENT_COMPATCT | ENT HTML401, ‘UTF-8’,false); | htmlspecialchars($string,double encode: false); |
Attributes (thuộc tính)
Người dùng hiện có thể sử dụng siêu dữ liệu có cấu trúc với native syntax của PHP, thay vì các chú thích của Tài liệu PHP.
PHP 7.0 | PHP 8.0 |
class Postscontroller{ /** * @Route(“api/posts/{id}”),methods={“GET”} */ public function get($id){ // todo } } | class PostsController{ #[Route(“api/posts/{id}”, ,methods: [“GET”])] public function get($id){ // todo } } |
Constructor property promotion (giới thiệu về cách khởi tạo đối tượng)
Có rút ngắn mã nguồn khi xác định và khởi tạo thuộc tính cho đối tượng.
Xem thêm: https://hocvietcode.com/mot-so-cai-tien-moi-cua-php-8/#Gioi_thieu_Constructor_Property
PHP 7.0 | PHP 8.0 |
class Point{ public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0 ){ $this->x = $x; $this->y = $y; $this->z = $z; // todo } } | class Point{ public function __construct( public float $x = 0,0, public float $y = 0.0, public float $z = 0.0 ){ //todo } } |
Union types ( kêt hợp kiểu dữ liệu)
Người dùng có thể sử dụng các khai báo kiểu kết hợp gốc được xác thực trong thời gian chạy, thay vì các chú thích Tài liệu PHP.
PHP 7 | PHP 8 |
class Number{ /** @var int|float */ private number; /** * @param float|int $number */ public function __construct($number){ $this->number = $number; } } new Number(‘NaN’); // its work | class Number { public function __construct(private int|float $number){ // to do } } new Number(‘NaN’); // type error |
Match Expression ( so khớp biểu thức)
Đối sánh biểu thức trong PHP 8.0 tương tự như chuyển đổi với các tính năng sau:
- Đối sánh là một biểu thức, có nghĩa là kết quả của nó có thể được lưu trữ trong một biến hoặc nó có thể được trả về.
- Các nhánh so khớp chỉ hỗ trợ các biểu thức một dòng và không yêu cầu câu lệnh break ; .
- Đối sánh không so sánh chặt chẽ.
PHP 7 | PHP 8 |
<?php switch(8.0){ case ‘8.0’: $result = ‘8.0’; break; case 8.0; $result = ‘8.0 expected’; break; } echo $result; // 8.0 | echo match(8.0){ ‘8.0’ => ‘8.0’, 8.0 => ‘8.0 expected’, }; // 8.0 excepted |
Null Safe operator
Người dùng có thể sử dụng một loạt (dây chuyền) các cuộc gọi với toán tử an toàn rỗng mới thay vì
viết mã cho các điều kiện kiểm tra null.
Toàn bộ quá trình thực hiện bị hủy bỏ khi việc xác định một phần tử trong chuỗi không thành công và sau đó, toàn bộ dây chuyền có giá trị null.
Xem thêm tại https://hocvietcode.com/mot-so-cai-tien-moi-cua-php-8/#Toan_tu_nullsafe
Enhanced Error Handling and Type System (Hệ thống phân loại và xử lý lỗi nâng cao)
Đã có nhiều thay đổi trong các loại hệ thống khác nhau và cải tiến xử lý lỗi như sau:
- Kiểm tra kiểu chặt chẽ hơn cho các toán tử số học / bitwise so với phiên bản trước đó
- Xác thực phương pháp tính trạng trừu tượng
- Magic methods giờ đã có chữ ký chính xác (correct signatures).
- Cảnh báo engine đã được phân loại lại
- Method không tương thích gây ra lỗi nghiêm trọng
- Kế thừa với private method
- Mixed type
- Static return type
- Sử dụng các đối tượng Opaque thay vì tài nguyên cho OpenSSL, Gd, Curl,
Phần mở rộng XML Writer, Sockets và XML
Consistency (tính nhất quán)
PHP 8.0 có kiểu lỗi consistency cho các function internal. Hầu hết các chức năng bên trong ném ra một ngoại lệ Lỗi khi không xác nhận được các tham số.
Just In Time (JIT) Compiler
Là một ngôn ngữ được giải mã hoặc thông dịch, PHP khi biên dịch, không chạy ngay lập tức tại thời điểm khởi chạy. Nó chạy trong thời gian thực (real-time). Trong các phiên bản trước của PHP, trong quá trình biên dịch, bất cứ khi nào mã PHP được chạy, trình thông dịch trước tiên phải thông dịch, sau đó biên dịch và cuối cùng là thực thi mã. Điều này được thực hiện lặp đi lặp lại cho mỗi yêu cầu, dẫn đến việc thực thi mã chậm và lãng phí tài nguyên CPU.
Vấn đề này hiện đã được khắc phục với sự ra đời của trình biên dịch Just In Time (JIT), trong PHP 8.0.
Trình biên dịch JIT cho phép người dùng biên dịch một chương trình thành mã máy ngay trước khi nó có thể được thực thi. Khi JIT bỏ qua giai đoạn biên dịch, nó cung cấp tính linh hoạt trong mã PHP và mang lại những cải tiến sâu rộng về mã thực thi, sử dụng bộ nhớ và hiệu suất. Tuy nhiên, những cải tiến này chỉ áp dụng cho các phép tính toán học hoặc số, chứ không phải các ứng dụng Web PHP thông thường. JIT được sử dụng rộng rãi trong các chương trình liên quan đến chu kỳ thực thi dài như kết xuất 3D, phân tích dữ liệu hoặc Trí tuệ nhân tạo.
PHP 8.0 giới thiệu hai công cụ biên dịch JIT, đó là Tracing JIT và Function JIT.
Tracing JIT là công cụ đảm bảo nhất trong số hai công cụ này. Trên các điểm chuẩn tổng hợp, nó có hiệu suất tốt hơn gấp ba lần. Ngoài ra, có hai lần cải tiến trên các ứng dụng chạy dài cụ thể.
Bài tập
Làm bài quản lý sinh viên với các yêu cầu sau:
Bước 1: sử dụng php tạo bảng trong CSDL qlsv, bao gồm 2 bảng sau:
- users: id (tự tăng), username,password,fullname, email, phone ,avatar (varchar) (fullname và phone,email,avatar cho phép null)
- students: id(tự tăng), name(varchar) ,birthday(datetime),gender(tinyint) ,class_id (int) (FK references class(id)).
- Bảng class bao g ồm côt id(int),name(varchar)
- Bảng subjects bao gồm côt id(int),name(varchar)
- Bảng students_subjects bao gồm cột id(int),student_id(int) - FK references student(id),subject_jd(int) FK references subjects(id)
Bước 2: Tạo 1 form đăng ký như sau:
Yêu cầu:
- Username required, độ dài tối thiểu 3 ký tự, max 20 ký tự
- Password required, độ dài tối thiểu 3 ký tự, max 20 ký tự
- Pasword và confirm password cần được đáp ứng yêu cầu giống nhau
- Phải check vào agree mới cho register
- Bấm vào i already have a membership sẽ chuyển trang sang trang đăng nhập.
- Khi Các yêu cầu không thỏa mãn, thông báo lỗi cho người dùng
- Nếu yêu cầu thỏa mãn, Thêm một bản ghi mới vào bảng User
Bước 3: Tạo một form đăng nhập như sau:
Yêu cầu:
Form cần validate required cho trường username và password
Username có độ dài tối thiểu 3 ký tự
Password có độ dài tối thiểu 3 ký tự
Khi người dùng nhập liệu sai không đăng nhập được thông báo lỗi dưới chân input cho người dùng, validate cả tầng html và php, nếu so khớp với CSDL, chuyển trang sang trang qlsv.php
Bước 4:
Trong file qlsv.php , kết nối csdl, làm các tính năng thêm sửa xóa sinh viên theo hình: