Header ads

Header ads
» » » PHP - Có gì mới trong PHP 7

Phiên bản stable PHP hiện nay đang được sử dụng là phiên bản PHP 5.6. Sau một số tranh luận thì nhóm phát triển đã quyết định họ sẽ bỏ qua tên phiên bản PHP 6. PHP 6 đã tồn tại trong quá khứ như một dự án thử nghiệm, nhưng vì lý do nào đó chưa hoàn chỉnh.

Để tránh việc người dùng sẽ bị lẫn lộn giữa phiên bản thử nghiệm trước đó và bản phát triển mới nhất này, thì bản phát hành mới sẽ mang tên PHP 7.


1. Core Zend Engine hoàn toàn mới

Zend engine đã tạo ra sức mạnh cho PHP từ năm 1999 khi nó được giới thiệu với bản phát hành mới PHP 4. Zend - bạn đừng nhầm lẫn với Zend Framework - là một engine thực thi mã nguồn mở được viết bằng C để thông dịch ngôn ngữ PHP. Loạt PHP 5.X hiện tại sử dụng Zend Engine II tăng cường chức năng của engine ban đầu, bổ sung thêm một mô hình đối tượng mở rộng và nâng cao hiệu suất thực thi đáng kể cho ngôn ngữ này.

PHP 7 có một phiên bản engine hoàn toàn mới có tên gọi là PHP#NG (Next Generation).

2. Tốc độ nhanh gấp hai lần

Ưu điểm dễ nhận biết nhất của engine mới PHPNG là sự cải thiện hiệu suất đáng kể. Đội ngũ phát triển của PHPNG đã tái cấu trúc Zend Engine, đáng chú ý là tối ưu hóa việc sử dụng bộ nhớ và bổ sung thêm một bộ biên dịch just-in-time (JIT) cho phép biên dịch vào thời điểm chạy chứ không phải trước khi thực hiện.

Kết quả thu được ra sao? Bạn có thể thấy bảng so sánh tốc độ thực thi như hình dưới đây được cung cấp bởi Zend Performance Team. Bằng cách sử dụng PHP 7 không chỉ giúp code của bạn thực thi nhanh hơn mà bạn cũng sẽ cần ít máy chủ hơn để phục vụ cùng một số lượng user.


3. Quản lý lỗi dễ dàng hơn

Ít nhất cũng phải nói rằng, việc kiểm soát và có khả năng bắt các fatal error chưa bao giờ là công việc dễ dàng đối với các lập trình viên PHP. Engine Exceptions mới sẽ cho phép bạn thay thế những loại lỗi này với các ngoại lệ (exception). Nếu ngoại lệ không bắt được thì PHP sẽ tiếp tục trả về các fatal error giống như các phiên bản PHP 5.X hiện hành.

Các đối tượng \EngineException mới không mở rộng \Exception Base Class. Điều này đảm bảo khả năng tương thích ngược và các kết quả từ hai kiểu exception khác nhau trong việc quản lý lỗi: truyền thống và engine exceptions.

Để cho phép các lập trình viên có thể bắt được cả hai, PHP 7 giới thiệu một Parent Class mới dưới cái tên là \BaseException.


4. Hỗ trợ các hệ thống Windows 64-Bit

PHP là một thành viên nổi bật của stack LAMP (Linux - Apache - MySQL - PHP), có nghĩa môi trường gốc của nó là Linux - nhưng bạn cũng có thể chạy nó trên một hệ thống Windows. Các phiên bản PHP 5.X chưa cung cấp số integer 64-bit hoặc hỗ trợ các tập tin lớn, vì vậy cho đến tận bây giờ các bản build x64 đã được coi là thử nghiệm.

PHP 7 sẽ thay đổi điều này với việc giới thiệu nhất quán hỗ trợ 64-bit nghĩa là cả các số nguyên 64-bit và các file lớn sẽ được hỗ trợ, cho phép bạn tự tin chạy ngôn ngữ này trên hệ điều hành Windows 64-bit của bạn trong tương lai.

5. Các toán tử mới Spaceship và Null Coalescing

Toán tử Spaceship chạy dưới tên chính thức là Combined Comparison Operator (toán tử so sánh kết hợp). Ký hiệu của toán tử mới trông như thế này: <=> (giống như một con tàu vũ trụ đơn giản, nếu bạn chịu khó tưởng tượng).

Toán tử spaceship này trả về 0 nếu cả hai toán hạng bằng nhau, 1 nếu toán hạng bên trái lớn hơn, và -1 nếu toán hạng bên phải lớn hơn. Nó cũng được gọi là một toán tử so sánh three-way, và đã tồn tại trong những ngôn ngữ lập trình phổ biến khác như Perl và Ruby.


Toán tử Null Coalescing được thể hiện bằng hai dấu chấm hỏi (??). Bạn có thể sử dụng nó khi muốn kiểm tra xem liệu một cái gì đó có tồn tại và trả về một giá trị mặc định hay không. Toán tử coalesce trả về kết quả của toán hạng đầu tiên nếu nó tồn tại và không null, và trả về toán hạng thứ hai trong các trường hợp khác.

Đây là cách mà toán tử mới này giảm được thời gian với những việc khai báo cơ bản:


6. Cho phép định nghĩa kiểu dữ liệu khi khai báo

Bạn đã bao giờ muốn ngăn chặn các giá trị trả về không mong muốn bằng cách khai báo giá trị trả về của một function? Vâng, bản PHP 7 mới này cho phép các lập trình viên nâng cao chất lượng code của họ với sự giúp đỡ của các khai báo kiểu trả về. Giống Hack Lang của Facebook.

Hình dưới đây mô tả một trường hợp rất đơn giản mà function foo() chắc chắc trả về một mảng.


Để mở rộng các tính năng này nhiều hơn, PHP 7 giới thiệu 4 kiểu khai báo mới cho các kiểu vô hướng: int, float, string và bool. Những kiểu vô hướng mới này cho phép các lập trình viên biểu thị rằng họ đang mong đợi các giá trị integer, float, string, hoặc boolean được trả về. Các kiểu vô hướng mới được giới thiệu bởi PHP 7 cũng sẽ được hỗ trợ bởi Type Hints cho phép các lập trình viên tập trung vào kiểu của các tham số kể từ các bản PHP 5.X. 

7. Bổ sung thêm các class Anonymous 

PHP 7 cho phép bạn sử dụng các class vô danh (anonymous), đây là một đặc trưng đã có trong những ngôn ngữ lập trình hướng đối tượng khác như C# và Java. Một class anonymous là một class không có tên. Đối tượng mà nó khởi tạo có cùng chức năng như một đối tượng của một lớp có tên.

Cú pháp giống như chúng ta sử dụng trong các class PHP truyền thống, chỉ có thiếu cái tên class. Nếu các lớp vô danh (anonymous classes) được sử dụng tốt, chúng có thể làm tăng tốc độ thực thi. Các lớp vô danh là tuyệt vời khi một class chỉ được sử dụng một lần trong suốt quá trình thực thi và trong những trường hợp một class không cần phải được ghi tài liệu.


8. Dễ dàng hơn khi Imports trong cùng Namespace

Đặc trưng mới Group Use Declarations sẽ là một món quà đáng giá dành cho những ai muốn import nhiều class từ cùng namespace. Cú pháp mới cắt bỏ sự rườm rà, làm cho code của bạn trở nên gọn gàng và dễ nhìn hơn, và giúp tiết kiệm cho bạn rất nhiều thời gian ngồi gõ code.

Nó cũng sẽ giúp việc đọc code và debug trở nên dễ dàng hơn, việc khai báo sử dụng group giúp bạn xác định các import thuộc về cùng module.

Những tính năng PHP 7

Bộ tính năng PHP 7 

Cải thiện hiệu năng
Hiệu năng hoạt động chính xác là lý do quan trọng nhất để bạn nâng cấp server ngay khi PHP 7 bản chính thức ra mắt. Phần cốt lõi được tái cấu trúc và giới thiệu bởi phpng RFC khiến PHP 7 nhanh chẳng kém gì HHVM, thậm chí còn nhanh hơn. Các bản benchmark chính thức có kết quả rất ấn tượng: hầu hết các ứng dụng thực tế hiện nay chạy trên PHP 5.6 sẽ chạy nhanh ít nhất là gấp đôi khi lên PHP 7.
WordPress benchmarks
PHP 7 xử lý số lượng request/giây hơn gấp đôi so với PHP 5.6, điều này cho thấy hiệu năng hoạt động tăng 100% đối với các website Wordpress.
Vấn đề tương thích với phiên bản cũ
Hãy nói về một vài điều có thể làm hỏng một ứng dụng PHP đang chạy trên các phiên bản cũ.
  • Loại bỏ các mục bị phản đối (Deprecated item)
Một loạt các mục bị phản đối đã bị loại bỏ. Các mục này đã bị đưa vào danh sách deprecate từ lâu, hi vọng là trong các bạn không có ai sử dụng tới chúng. Điều này cũng có thể ảnh hưởng tới các ứng dụng có tuổi đời lâu năm.
Đặc biệt, thẻ dạng ASP ( <%, <%= và %> ) đã bị loại bỏ cùng với thẻ script ( ). Hãy chắc rằng bạn đang sử dụng thẻ
Phần mở rộng ereg (và tất cả các hàm ereg_* ) đã bị phản đối từ PHP 5.3. Nó được thay thế bởi phần mở rộng PCRE (các hàm preg_* ) được giới thiệu với rất nhiều tính năng. Phần mở rộng mysql (và các hàm mysql_* ) cũng bị phản đối từ PHP 5.5. Để chuyển đổi trực tiếp, bạn có thể sử dụng phần mở rộng mysqli và các hàm mysqli_* để thay thế.
  • Cú pháp biến thống nhất
Cú pháp biến thống nhất có ý nghĩa đối với việc giải quyết một chuỗi các mẫu thuẫn khi xử lý các biểu thức biến-biến. Xét ví dụ sau:
Các tính năng PHP 7
Trong PHP 5, biểu thức $person->$property['first'] được xử lý như $person->{$property['first']}. Trong các điều kiện thực tế, nó được biên dịch tương tự $person->name, cho bạn kết quả "My name is Erika". Mặc dù đây là một trường hợp ít gặp nhưng nó cho thấy sự mâu thuẫn rõ ràng với thứ tự thực hiện biểu thức bình thường là từ trái qua phải.
Với PHP 7, biểu thức $person->$property['first'] được xử lý như {$person->$property}['first']. Trình biên dịch sẽ thực hiện $person->$property trước; do đó đoạn code mẫu trên sẽ không hoạt động trên PHP 7 vì $property là một mảng và không thể được chuyển thành chuỗi ký tự.
Một cách nhanh chóng và dễ dàng để sửa lỗi này là khai báo rõ ràng thứ tự thực hiện tính toán bằng các dấu ngoặc nhọn (ví dụ: $person->{$property['first']}), cách này sẽ đảm bảo kết quả khớp nhau giữa PHP 5 và PHP 7.
Nhờ vào cú pháp thống nhất từ trái qua phải, rất nhiều biểu thức trước kia không hợp lệ thì nay lại trở nên hợp lệ. Để minh họa cho cách xử lý mới này, xét ví dụ class sau:
Các tính năng PHP 7 mới
Với PHP 7, chúng ta có thể tạo ra sự kết hợp lồng nhau và các tổ hợp khác nhau giữa các toán tử:

Các tính năng PHP 7 là gì?
Đoạn code này sẽ cho ra lỗi cú pháp với PHP 5 nhưng lại hoạt động tốt với PHP 7.
Tương tự, truy nhập tĩnh nhiều cấp cũng có thể thực hiện được ở PHP 7:
Những tính năng PHP 7 mới năm 2015
Trong PHP 5, lệnh trên sẽ cho kết quả lỗi cú pháp kinh điển T_PAAMAYIM_NEKUDOTAYIM.
Fatal Error khi khai báo nhiều mệnh đề "default"
Đây cũng là một trường hợp hiếm gặp và liên quan nhiều hơn tới lỗi logic trong phần code của bạn. Khi bạn khai báo nhiều mệnh đề mặc định cho một lệnh switch, PHP 5 sẽ không báo lỗi, mệnh đề mặc định cuối cùng sẽ được sử dụng, dẫn tới việc itmf lỗi khó khăn hơn. Khác với PHP 5, ở tính năng PHP 7 bạn sẽ bị báo lỗi Fatal Error: Switch statements may only contain one default clause.
Cơ chế ngoại lệ (Engine Exceptions)
Cơ chế ngoại lệ có ý nghĩa với việc đơn giản hóa xử lý lỗi trong ứng dụng của bạn. Các thông báo lỗi fatal đã có và các lỗi nghiêm trọng được thay thế bởi các ngoại lệ (exception) giúp chúng ta bắt lỗi và có thể xử lý lỗi ấy như hiển thị lỗi ra màn hình, lưu lỗi lại trong hệ thống theo dõi, thực hiện các hàm xử lý lỗi.
Cơ chế ngoại lệ được thực hiện theo cách tương thích với các phiên bản cũ nhưng vẫn sẽ có các trường hợp đặc biệt tác động tới ứng dụng khi các ứng dụng cũ có dùng các hàm xử lý lỗi do người dùng tự viết. Ví dụ:
Cơ chế ngoại lệ trong php 7
Đoạn code này in ra thông báo lỗi khi gặp lỗi sai kiểu dữ liệu với lời gọi hàm a() mà tham số truyền vào là một chuỗi ký tự. Trong PHP 5, nó sinh lỗi E_RECOVERABLE được bắt bởi hàm tự viết trên, kết quả in ra màn hình sẽ là:
Tính năng PHP 7 báo lỗi
Đoạn code này in ra thông báo lỗi khi gặp lỗi sai kiểu dữ liệu với lời gọi hàm Lưu ý là code sẽ tiếp tục thực thi vì lỗi đã được xử lý. Trong PHP 7, đoạn code này sẽ sinh ra ngoại lệ TypeError (không phải lỗi!) do đó hàm bắt lỗi sẽ không được gọi. Dưới đây là output mà bạn sẽ nhận được:

Đoạn code trong tính năng PHP 7

Code sẽ dừng thực thi vì ngoại lệ này chưa được xử lý. Để giải quyết vấn đề này, bạn nên bắt lỗi bằng khối lệnh try/catch. Một lưu ý quan trọng là hệ thống ngoại lệ đã thay đổi để hỗ trợ cơ chế ngoại lệ mới với ít ảnh hưởng nhất tới các code cũ:
Cơ chế ngoại lệ trong tính năng PHP 7

Về cơ bản, điều này có nghĩa là hệ thống ngoại lệ bắt tất cả (catch-all Exception) hiện tại là Throwable thay vì Exception. Điều này sẽ không ảnh hưởng tới code cũ nhưng các bạn hãy nhớ tới vấn đề này khi xử lý cơ chế ngoại lệ mới trong PHP 7.
Tính năng ngôn ngữ mới
Phần thú vị nhất khi tìm hiểu tính năng PHP 7 chính là những tính năng mới sẽ xuất hiện trong phiên bản này. Chúng ta sẽ cùng điểm qua các tính năng đó.
Toán tử mới
PHP 7 mang tới cho chúng t hai toán tử mới: spaceship (toán tử so sánh kết hợp) và null coalesce operator (toán tử ??).
Toán tử spaceship ( <=> ) còn được gọi là toán tử so sánh kết hợp, toán tử này có thể được sử dụng để rút gọn các chuỗi so sánh phức tạp. Xét ví dụ sau:
Toán tử mới trong tính năng php 7
Biểu thức trên cho ra kết quả -1 nếu $a nhỏ hơn $b, 0 nếu $a bằng $b, 1 nếu $a lớn hơn $b. Nó là một dạng rút gọn cho biểu thức sau:

Biểu thức rút gọn trong tính năng php 7
Toán tử null coalesce operator ( ?? ) được dùng trong trường hợp rất phổ biến: kiểm tra một biến đã được đặt giá trị trước khi sử dụng hay không, nếu có thì trả về giá trị của biến, không thì trả về một giá trị mặc định nào đó. Trong PHP 5, bạn sẽ làm việc đó tương tự như thế này:
Giá trị của biến trong tính năng php 7
Còn với tính năng PHP 7, ta có thể đơn giản hóa nó thành:
Rút gọn biểu thức tính năng PHP 7
Scalar Type Hints
Một trong những tính năng gây tranh cãi nhiều nhất của PHP 7 là scalar type hints, với tính năng này ta có thể sử dụng các kiểu vô hướng như integer, float, string, boolean để nhắc kiểu trong hàm và phương thức. Mặc định trong PHP là các kiểu vô hướng không bị hạn chế, có nghĩa là nếu bạn truyền một giá trị float vào tham số integer thì giá trị này sẽ bị ép kiểu thành integer và không báo lỗi.
Giờ chúng ta có thể kích hoạt chế độ giới hạn (strict mode) để báo lỗi khi truyền tham số sai kiểu. Ví dụ:
Scalar Type Hints trog tính năng php 7
Đoạn code này sẽ không tạo ra lỗi vì chúng ta chưa dùng strict mode. Điều duy nhất xảy ra ở đây là sự chuyển đổi kiểu, string "5" được truyền vào sẽ bị ép kiểu thành integer trong phạm vi hàm double.
Nếu muốn chỉ có dữ liệu kiểu integer mới được truyền vào hàm double, ta có thể kích hoạt strict mode bằng cách thêm dòng lệnh sau vào dòng đầu tiên của đoạn code: declare(strict_types = 1).
Kiểu integer mới trong tính năng php 7
Đoạn code này giờ sẽ sinh ra lỗi Fatal error: Uncaught TypeError: Argument 1 passed to double() must be of the type integer, string given.
Return Type Hints (nhắc kiểu trả về)
Một tính năng quan trọng nữa mà PHP 7 giới thiệu là khả năng định nghĩa kiểu trả về của phương thức và hàm, cách vận hành của nó tương tự scalar type hints.
Return Type Hints trong tính năng php 7
Đoạn code này sẽ chạy không gặp lỗi gì và cho ra kết quả được tự động chuyển kiểu thành bool. Nếu bạn bật strict mode (cách làm như trên với scalar type hints), bạn sẽ nhận được thông báo lỗi:
Báo lỗi strict mode tính năng php 7
Thêm một lưu ý, các lỗi này là các ngoại lệ có thể bắt và xử lý thông qua khối lệnh try/catch. Nhắc kiểu trả về có thể sử dụng bất cứ kiểu dữ liệu hợp lệ nào, không chỉ giới hạn ở kiểu vô hướng.
Sắp tới
PHP 7 timeline cho thấy một phiên bản ổn định sẽ ra mắt vào giữa tháng 10. PHP 7 đang trong giai đoạn phát hành các phiên bản gần chính thức, bản beta đã có để các bạn có thể kiểm thử. Các bạn có thể xem bản gần chính thức với tất cả thay đổi sẽ có trong PHP 7 để biết thêm chi tiết.
Dù có thể không có thông báo về tính năng mới nào nhưng vẫn có thể có các thay đổi trước khi phiên bản chính thức được ra mắt, do đó các bạn không nên sử dụng PHP 7 cho dự án thực tế vào thời điểm này. Các bạn có thể thử trải nghiệm PHP 7 thông qua Vagrant VM được tạo bởi Rasmus Lerdorf. Đội ngũ xây dựng PHP 7 khuyến khích mọi người dùng thử ứng dụng với PHP 7 và thông báo bất kỳ lỗi nào mà bạn tìm ra.

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn