PHP 7.4 là phiên bản cuối cùng trước khi PHP 8 ra mắt, phiên bản này mang đến nhiều tính năng mới, bổ sung cú pháp và sửa lỗi.
PHP 7.4 được phát hành vào ngày 28 tháng 11 năm 2019.
Có gì mới trong Phiên bản PHP 7.4
Trong bài đăng này, bạn sẽ tìm thấy một danh sách với tất cả mọi thứ mới và được thay đổi để giúp bạn chuẩn bị cho việc nâng cấp lên phiên bản PHP7.4.
Hãy bắt đầu ngay nào.
Các tính năng mới trong PHP 7.4
PHP 7.4 đi kèm với một số lượng tính năng mới đáng kể. Chúng ta sẽ bắt đầu với một danh sách tất cả các tính năng mới, và sau đó xem xét các thay đổi và phản đối.
1. Arrow function
Các arrow function, còn được gọi là "short clourse".
Trong khi trước đây bạn viết điều này:
array_map(function (User $user) {
return $user->id;
}, $users)
Nhưng bây giờ bạn có thể viết thế này:
array_map(fn (User $user) => $user->id, $users)
Có một vài lưu ý về arrow function:
-
Chúng luôn có thể truy cập phạm vi cha mẹ, không cần từ khóa
use
.
-
$this
có sẵn giống như clourse bình thường.
-
Các arrow function chỉ có thể chứa một biểu thức, đó cũng là câu lệnh
return
.
2. Typed Properties
Các biến trong class có thể được gợi ý:
class A
{
public string $name;
public ?Foo $foo;
}
Có rất nhiều điều để nói về tính năng này, nhưng chúng ta sẽ đi chi tiết ở bài viết khác nhé.
3. Type Variance
Thật tốt khi thấy một số cải tiến đang thực sự đến trong lõi của PHP.
Bạn có thể sử dụng covariant return types -
class ParentType {}
class ChildType extends ParentType {}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
}
- và contravariant arguments
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
4. Toán tử gán kết hợp Null
Tiếp theo là toán tử gán kết hợp null.
Viết tắt cho các hoạt động liên kết null. Thay vì làm điều này:
$data['date'] = $data['date'] ?? new DateTime();
Bạn có thể làm thế này:
$data['date'] ??= new DateTime();
5. Spread Operator
Tiếp theo, giờ đây có thể sử dụng toán tử trải rộng trong mảng:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]
Lưu ý rằng điều này chỉ hoạt động với các mảng với key là số. Key là chuỗi chưa được hỗ trợ.
6. Ký tự phân tách số
PHP 7.4 cho phép sử dụng dấu gạch dưới để phân tách trực quan các giá trị số. Nó trông như thế này:
$unformattedNumber = 107925284.88;
$formattedNumber = 107_925_284.88;
Các dấu gạch dưới chỉ đơn giản là bị bỏ qua bởi PHP Engine.
7. Foreign funtion interface
Chuyển sang một số tính năng cấp độ cốt lõi hơn: Foreign funtion interface gọi tắt là 'FFI', cho phép chúng ta gọi code C từ userland.
Điều này có nghĩa là các phần mở rộng PHP có thể được viết bằng PHP thuần túy và được tải thông qua composer.
Cần lưu ý rằng đây là một chủ đề phức tạp. Bạn vẫn cần có kiến thức C để có thể sử dụng đúng tính năng này.
8. Preloading
Một tính năng cấp thấp hơn là Preloading. Đây là một bổ sung tuyệt vời cho phần lõi của PHP, nó có thể dẫn đến một số cải tiến hiệu suất đáng kể.
Nói tóm lại: Nếu bạn đang sử dụng một framework, các tệp của nó phải được tải và liên kết theo mọi request. Preloading cho phép máy chủ tải các tệp PHP trong bộ nhớ khi khởi động và có sẵn cho tất cả các request tiếp theo.
Việc tăng hiệu suất tất nhiên đi kèm với một cái giá hợp lý: Nếu nguồn của các tệp được tải sẵn bị thay đổi, máy chủ phải được khởi động lại.
9. Custom object serialization
Hai magic method mới đã được thêm vào: __serialize
và __unserialize
. trong phiên bản PHP 7.4
Sự khác biệt giữa các phương thức này và __sleep
và __wakeup
được thảo luận cụ thể tại đây.
10. Ánh xạ cho các tham chiếu
Các thư viện như var dumper của Symfony phụ thuộc rất nhiều vào Relection API để kết xuất một biến đáng tin cậy.
Trước đây không thể ánh xạ đúng các tham chiếu, dẫn đến các thư viện này dựa vào các bản hack để phát hiện chúng.
PHP 7.4 đã thêm class ReflectionReference
để giải quyết vấn đề này.
11. Weak references
Weak reference là các tham chiếu đến các đối tượng, mà không ngăn chặn chúng bị phá hủy.
12. Thêm mb_str_split
Hàm này cung cấp chức năng tương tự như str_split
, nhưng trên các chuỗi nhiều byte.
13. Password hashing register
Những thay đổi bên trong đã được thực hiện đối với cách sử dụng các thư viện hashing, để người dùng dễ dàng sử dụng chúng hơn.
Cụ thể hơn, một hàm password_acheos
mới đã được thêm vào, nó trả về một danh sách tất cả các thuật toán mật khẩu đã đăng ký.
RFC có một chút không rõ ràng về lợi ích, may mắn là, Sara đã cung cấp thêm một ít thông tin:
Điều đó có nghĩa là ext / sodium (hoặc bất kỳ ai) có thể đăng ký thuật toán băm mật khẩu một cách linh hoạt. Kết quả cuối cùng là argon2i và argon2id sẽ phổ biến hơn.
Một số thay đổi và Không dùng nữa
Bên cạnh các tính năng mới, cũng có rất nhiều thay đổi về ngôn ngữ. Hầu hết các thay đổi này là không phá vỡ, mặc dù một số có thể có ảnh hưởng đến code base của bạn.
Lưu ý rằng có một số thông báo không dùng nữa cho các lập trình viên là một số tính năng sẽ bị xóa hoặc thay đổi trong tương lai. Sẽ tốt hơn nếu bạn không bỏ qua các cảnh báo và khắc phục chúng ngay lập tức.
Vì nó sẽ làm làm cho bạn có thể nâng cấp lên PHP 8.0 dễ dàng hơn.
> UPDATE: PHP8 đã ra mắt ngày 26/11/2020. Xem ngay PHP 8 có gì mới?
Left-associative ternary
Toán tử ternary có một số biến thể kỳ lạ trong PHP. RFC này thêm một cảnh báo không dùng nữa cho các câu lệnh ternary lồng nhau. Trong PHP 8, nó sẽ được chuyển thành runtime error.
1 ? 2 : 3 ? 4 : 5; // Không còn dùng nữa
(1 ? 2 : 3) ? 4 : 5; // ok
Ngoại lệ được phép trong __toString
Trước đây, các ngoại lệ không thể được ném trong __toString
. Chúng đã bị cấm vì một cách giải quyết đối với một số cơ chế xử lý lỗi cốt lõi cũ, nhưng Nikita chỉ ra rằng 'giải pháp' này không thực sự giải quyết được vấn đề mà nó đã cố gắng giải quyết.
Hành vi này hiện đã được thay đổi và ngoại lệ có thể được ném từ __toString
.
Concatenation
Nếu bạn đã từng viết một cái gì đó như thế này:
echo "sum: " . $a + $b;
PHP trước đây sẽ thông dịch nó thế này:
echo ("sum: " . $a) + $b;
Nhưng, PHP 8 sẽ làm cho nó được thông dịch như thế này:
echo "sum :" . ($a + $b);
PHP 7.4 thêm cảnh báo không dùng nữa khi gặp biểu thức có chứa một dấu .
trước dấu một dấu +
hoặc -
.
array_merge
không tham số
Kể từ khi thêm spread operator, có thể có trường hợp bạn muốn sử dụng array_merge
như vậy:
$merged = array_merge(...$arrayOfArrays);
Để hỗ trợ trường hợp trong đó $arrayOfArrays
sẽ trống, cả array_merge
và array_merge_recursive
hiện cho phép một danh sách tham số trống.
Một mảng trống sẽ được trả về nếu không có đầu vào nào được truyền.
Dấu ngoặc nhọn để truy cập mảng và chuỗi
Có thể truy cập các mảng và chuỗi bằng dấu ngoặc nhọn:
Cái này sẽ không dùng nữa.
Thông báo truy cập mảng không hợp lệ
Nếu bạn đã sử dụng cú pháp truy cập mảng trên (giả sử) một số nguyên.
PHP trước đây sẽ trả về null. Kể từ PHP 7.4, bạn sẽ nhận được một thông báo.
Cải tiến proc_open
Các thay đổi đã được thực hiện cho proc_open
để nó có thể thực thi các chương trình mà không cần thông qua shell.
Điều này được thực hiện bằng cách chuyển một mảng thay vì một chuỗi cho lệnh.
strip_tags cũng chấp nhận mảng
Bạn đã từng chỉ có thể tách nhiều tag như vậy:
strip_tags($string, '<a><p>')
PHP 7.4 cũng cho phép sử dụng một mảng:
strip_tags($string, ['a', 'p'])
ext-hash
luôn có sẵn
Phần mở rộng này hiện có sẵn vĩnh viễn trong tất cả các bản cài đặt PHP.
PEAR không còn có sẵn mặc định
Vì PEAR không được duy trì tích cực nữa, The Core Team đã quyết định xóa cài đặt mặc định của nó với PHP 7.4.
Một số cảnh báo không dùng nữa khác
RFC này có rất nhiều cảnh báo không dùng nữa. Hãy chắc chắn đọc một lời giải thích chi tiết hơn trên trang RFC.
Và còn nhiều thứ nữa....
Nếu bạn chưa biết, mọi thay đổi trong phiên bản của PHP đều được đưa ra để vote.
Và năm nay quy trình này có một số cải tiến.
Cải tiến quy trình bỏ phiếu cho RFC
Về mặt kỹ thuật, đây không phải là bản cập nhật liên quan đến PHP 7.4, nhưng nó đáng để nói đến: Các quy tắc bỏ phiếu cho RFC đã được thay đổi.
-
Họ luôn cần 2/3 đa số chấp thuận.
-
Không có thời gian bỏ phiếu ngắn hơn, tất cả các RFC phải được mở trong ít nhất 2 tuần.
Có gì mới trong PHP 7.4
Lời kết
Đó, đó là một số điểm thay đổi mới trong phiên bản PHP 7.4. Có thể nói, The Core Team đã làm việc rất vất vả.
Và nếu bạn đã đọc đến tận đây, rất có thể là bạn quan tâm đến PHP.
Vậy thì đừng quên chia sẻ và luôn luôn cập nhật công nghệ để bắt kịp cùng các lập trình viên PHP hàng đầu nhé.
> Tham khảo ngay: KHÓA HỌC PHP FULL STACK (Khóa học giảng dạy kết hợp trên PHP 5 và PHP 7)
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0968051561
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php