Một số cải tiến mới của PHP 8
Mục lục
Giới thiệu Constructor Property
Hiện tại, trong PHP, tất cả các thuộc tính cần thiết phải được lặp lại thường xuyên ít nhất tối thiểu bốn lần. Theo Yêu cầu nhận xét (RFC) của PHP 8, hàm constructor và định nghĩa tham số sẽ được hợp nhất, giúp khai báo tham số dễ dàng hơn nhiều.
Yêu cầu Nhận xét (RFO) là một tài liệu mô tả các thông số kỹ thuật cho một công nghệ và trở thành một tài liệu tiêu chuẩn.
Chỉ các tham số có tiền tố là các từ khóa private, public và được protected, được gọi là các promoted parameter mới có thể được xác định và hợp nhất với hàm tạo theo RFC.
Xét ví dụ khởi tạo trong PHP 7 sau:
<?php
class GlassSquare {
public float $p;
public float $q;
public float $r;
public function __construct(
float $p = 0.0,
float $q = 0.0,
float $r = 0.0
) {
$this->p = $p;
$this->q = $q;
$this->r = $r;
}
}
Các thuộc tính được lặp lại bốn lần trong ví dụ như sau:
- Trong quá trình khai báo thuộc tính
- Trong các tham số hàm khởi tạo
- Trong quá trình gán giá trị vào thuộc tính
- Kiểu thuộc tính được lặp lại hai lần.
Trong PHP 8, cú pháp khai báo được cải thiện như sau:
class Square {
public function __construct(
public float $p = 0.0,
public float $q = 0.0,
public float $r = 0.0,
) {}
}
Như chúng ta thấy, cú pháp trong PHP 8 gọn gàng hơn rất nhiều.
Mảng bắt đầu với index âm
Với PHP 8, các mảng bắt đầu bằng chỉ mục âm sẽ thay đổi hành vi của chúng.
Nếu một mảng bắt đầu bằng chỉ số âm (start_index < 0), các chỉ số còn lại sẽ bắt đầu từ 0. Tuy nhiên khái niệm này đã deprecated, hiện tại khi đánh index âm, các index của mảng vẫn sẽ chạy tăng dần.
Hàm array_fill sử dụng để khởi tạo nhanh một mảng với index xác định và xác định luôn số phần tử của mảng.
Ví dụ:
<?php
$a = array_fill(-6, 5, true);
echo '<pre>';
var_dump ($a);
echo '</pre>';
// output
//array(5) {
// [-6]=>
// bool(true)
// [-5]=>
// bool(true)
// [-4]=>
// bool(true)
// [-3]=>
// bool(true)
// [-2]=>
// bool(true)
//}
Lỗi kiểu nhất quán (type error) trong hàm dựng sẵn
Khi một tham số có kiểu dữ liệu không hợp lệ được truyền vào, hành vi của hàm dựng sẵn và do người dùng nghĩa sẽ khác nhau. Các hàm dựng sẵn đưa ra cảnh báo và trả về null trong khi các hàm do người dùng định nghĩa đưa ra TypeError.
Với PHP 8, bất cứ khi nào có loại tham số không khớp, các API phân tích tham số bên trong sẽ luôn tạo ra ThrowError.
Cú pháp được sử dụng để truy xuất tên của một lớp là Foo\Bar::class.
Với PHP 8, cú pháp tương tự cũng được mở rộng cho các đối tượng. Do đó, việc truy xuất tên của lớp cho một đối tượng nhất định trở nên dễ dàng hơn nhiều.
Toán tử nullsafe
PHP 8 giới thiệu toán tử nullsafe ?->. Trong quá trình đánh giá, nếu một toán tử trong chuỗi được đánh giá là null, thì quá trình thực thi chuỗi sẽ dừng và kết quả là null, Chỉ khi toán tử đầu tiên không được đánh giá là null, toán tử thứ hai mới có thể được đánh giá, nếu không, kết quả sẽ được trả về dưới dạng null.
Ví dụ:
PHP 7 | PHP 8 |
$country = null; if($session !==null){ $user = $session->user; if($user !==null){ $address = $user->getAddress(); } if($address !==null){ $country = $address->country; } } | $country = $session?->user?->getAddress()?->country; |
So sánh chuỗi và số trong PHP 8
Trong các phiên bản PHP cũ hơn, trong quá trình so sánh số và chuỗi, các chuỗi được chuyển đổi thành số và sau đó, so sánh được thực hiện giữa các số nguyên hoặc số thực.
PHP 8 đã thực hiện một thay đổi nhỏ ở đây, trong khi so sánh một chuỗi với một chuỗi số, hành vi hiện tại, nghĩa là, so sánh số vẫn được thực hiện. Tuy nhiên, so sánh chuỗi được thực hiện bằng cách chuyển đổi số thành chuỗi.
Chuỗi số trong PHP 8
Trong PHP, có ba loại chính cho các chuỗi chứa số, chúng như sau:
- Chuỗi số: Là chuỗi chứa số và đứng trước là khoảng trắng.
- Chuỗi số đứng đầu: Là chuỗi có các ký tự đầu tiên là chuỗi số và các ký tự sau đây không phải là số,
- Chuỗi không phải là số: Các chuỗi không phải là chuỗi số cũng như chuỗi số ở đầu thuộc danh mục này.
PHP 8 kết hợp các chế độ chuỗi số khác nhau thành một khái niệm duy nhất. Các ký tự số sẽ có các số có cả khoảng trắng ở đầu và cuối. Bất kỳ loại chuỗi nào khác được coi là không phải là số và sẽ throwTypeError.
Dấu phẩy ở cuối tham số
Danh sách Dấu phẩy được thêm vào danh sách các mục trong các trường hợp khác nhau được gọi là Dấu phẩy ở cuối. Các dấu phẩy ở cuối này đã được giới thiệu trong danh sách cú pháp, trong PHP 7.2 và PHP 7.3 đã giới thiệu chúng trong các tình huống gọi hàm.
Phiên bản PHP 8 đã giới thiệu dấu phẩy ở cuối danh sách tham số với các phương thức, hàm và bao đóng.
Bài tập
Làm một bài shop bán hàng cơ bản với yêu cầu như sau:
1. Tạo CSDL với các bảng:
products (id,productName,catId,productDesc,brandName,price,image)
productcate (id,cateName)
Mối QH giữa product và product cate là 1-n
Làm tính năng thêm sửa xóa cho product theo giao diện
2. Làm Trang chủ giao diện như hình (sản phẩm lấy động từ CSDL xuống)
Có các tính năng giỏ hàng, mua hàng
Tạo tính năng trang chủ hiển thị danh sách sản phẩm, khi người dùng bấm nút add cart, thêm vào session để lưu giỏ hàng phục vụ quá trình thanh toán. sau khi người dùng thanh toán, thêm thanh toán và lưu nội dung thanh toán vào CSDL
1 Comments