Bước tiến vượt bậc của PHP 5

PHP 5.0 bản chính thức được công bố vào ngày 13/7 vừa qua là một trong những sự kiện gây nhiều chú ý trong cộng đồng các nhà phát triển. PHP hiện là ngôn ngữ lập trình được sử dụng phổ biến nhất để xây dựng các trang web động với 16.251.453 tên miền, và 1.346.521 địa chỉ IP, tính đến ngày 18/7/2004.

PHP 5.0 có những cải tiến vượt bậc so với các bản PHP 4.x trước đây. Cho đến nay, PHP 5 được coi là bản cập nhật đáng kể nhất trong vòng 2 năm trở lại đây trong khi vẫn giữ được thế mạnh vốn có của PHP kể từ thời PHP/FI 2.0 là tốc độ và tính hiệu quả. (Tham khảo lịch sử phát triển PHP trên Wikipedia tại địa chỉ http://vi.wikipedia.org/wiki/PHP và các thông tin khác về PHP trên website của cộng đồng PHP Việt Nam tại địa chỉ http://www.phpvietnam.net).

Trở lại năm 1998, việc đưa Zend Engine 1 vào bộ lõi của PHP Engine đã đem đến sức mạnh vượt trội của PHP 4. Mặc dù PHP đã thu hút được số lượng người dùng đông đảo nhưng hạn chế chính của nó là không cung cấp thêm công cụ để xây dựng website.

Sáu năm sau đó, cộng đồng đã thực sự nghiêm túc xem xét lại những tồn tại cố hữu của PHP khiến các nhà phát triển gặp nhiều khó khăn khi xử lý một số vấn đề. Trong số đó, các nhà phát triển nhấn mạnh đến việc hỗ trợ lập trình hướng đối tượng trong PHP 4 một cách nửa vời, thư viện mở rộng MySQL không hỗ trợ giao thức máy khách MySQL 4.1 mới, hỗ trợ XML chắp vá và hỗn độn.

PHP 5 ra đời đã cải thiện 3 vấn đề quan trọng trên (được viết lại hoàn toàn) và kết quả thực sự ấn tượng. Tuy nhiên, đây vẫn chưa phải là tất cả những gì tốt đẹp nhất mà PHP 5 mang đến. Trong bài viết này, tôi sẽ đề cập đến 7 đặc điểm nổi bật của PHP 5. Những đặc điểm này cho phép phát triển mã lệnh ngắn hơn, đẹp hơn và cơ động hơn.

Hỗ trợ mạnh lập trình hướng đối tượng

Mặc dù những tính năng hỗ trợ đối tượng đã được tuyên bố từ PHP 4, tuy nhiên cộng đồng các nhà phát triển đã nhanh chóng nhận ra sự non nớt của chúng. Với PHP 5, các nhà phát triển từ nay có trong tay các phương tiện lập trình hướng đối tượng hoàn thiện (PHP 5 vẫn cho phép làm việc bình thường với kiểu lập trình cấu trúc). Có thể liệt kê một số đặc điểm:

  1. Mô hình đối tượng hoàn toàn mới dựa trên nguyên mẫu là mô hình của Java
  2. Hàm tạo dựng thống nhất _construct(): tạo điều kiện để di chuyển các lớp từ cây phân cấp lớp này sang cây phân cấp lớp khác.
  3. Hàm hủy _destruct(): tạo điều kiện để ghi lại các thông tin phục vụ cho việc tìm lỗi, đóng kết nối dữ liệu và thực hiện các công việc giải phóng tài nguyên khác.
  4. Các thuộc tính và các phương thức public, protected, và private: cho phép định nghĩa tính hữu hình của các thuộc tính lớp. Điều này rất quan trọng để hỗ trợ tính kế thừa và tính bao gói trong lập trình hướng đối tượng.
  5. Giao diện (Interface): tính năng này lấy từ mô hình của Java nhằm hỗ trợ đa kế thừa.
  6. Các lớp trừu tượng.
  7. Cấu trúc gợi nhắc kiểu lớp (class hints).
  8. Các thuộc tính và phương thức static.
  9. Các thuộc tính và phương thức Final.
  10. Một loạt các phương thức hỗ trợ mạnh khác như auto loading, reflection, xử lý lỗi ngoại lệ (exceptions), nhân bản đối tượng (object cloning), toán tử instanceof…

Thêm vào đó, các đối tượng bây giờ đồng thời cả gán lẫn truyền đều theo tham chiếu (reference hoặc handle) thay vì theo giá trị, nhờ vậy lập trình viên không còn phải sử dụng rải rác các kí hiệu & xuyên suốt chương trình. Các tính năng ngôn ngữ này cũng đã mở đường cho lập trình viên PHP sử dụng tối ưu sức mạnh của các mô hình thiết kế (pattern).

Thư viện mở rộng MySQL được viết lại hoàn toàn

Hệ quản trị CSDL MySQL song hành với PHP như hình với bóng, mặc dù PHP có khả năng hỗ trợ nhiều hệ CSDL khác. Tuy nhiên, trong khi sự kết hợp này đem đến những thành công vang dội cho cả hai sản phẩm thì sự lạc hậu của mô đun mở rộng để PHP làm việc với MySQL lại là một trở ngại khi nó không cho phép tận dụng các tính năng cực kì hấp dẫn của MySQL 4.1 và các bản cao hơn.

Nhóm phát triển PHP 5 đã viết một thư viện mở rộng hoàn toàn mới, rất mạnh để hỗ trợ MySQL 4.1 và 5.x, mang tên MySQLi (MySQL Improved). Các tính năng bao gồm:

  1. Câu lệnh biên dịch trước
  2. Tham số xuất và nhập có giới hạn
  3. Kết nối SSL
  4. Hàm đa truy vấn.

MySQLi còn tận dụng được hỗ trợ lập trình hướng đối tượng mới của PHP 5 để cung cấp một giao diện hướng đối tượng với MySQL. Trên hết, những bản mới nhất của MySQL bây giờ cho phép dùng chọn lọc con (subselects), chuyển tác (transactions) và bản sao dữ liệu (replication).

Bộ công cụ XML có thể tương tác

PHP 5 đã cải tiến hỗ trợ XML với các thư viện XML mở rộng như sau:

  1. Làm việc được với nhau như một thể thống nhất.
  2. Được chuẩn hóa trên một thư viện XML duy nhất: libxml2.
  3. Tuân thủ hoàn toàn các đặc tả của W3.
  4. Xử lý dữ liệu hiệu quả.

<5. Cung cấp công cụ xử lý XML mạnh.

Thêm vào đó, để tiếp tục duy trì tính dễ dàng của PHP trong việc xây dựng ứng dụng web, người ta đã đưa vào một thư viện XML mới cho phép đọc và thay đổi dễ dàng các tài liệu XML. Mô đun mở rộng SimpleXML cho phép tương tác với các thông tin có trong một văn bản XML như thể các thông tin này là mảng hay đối tượng, có thể dùng vòng lặp để duyệt qua chúng, biên tập chúng tại chỗ chỉ bằng cách gán các giá trị mới vào các biến.

Nếu bạn đã biết trước định dạng của tài liệu, ví dụ như khi phân tách các file RSS, dữ liệu cấu hình thì dùng SimpleXML rất tiện.

Nếu thích dùng DOM, bạn sẽ rất hứng thú với mô đun mở rộng DOM của PHP 5, mô đun này đã được viết lại và cải tiến rất nhiều so với bản trong PHP 4.

Hệ CSDL nhúng SQLITE

Sự gắn kết hoàn hảo với MySQL là một lợi thế rất lớn cho PHP 4.x, tuy nhiên nhiều khi ứng dụng web lại không cần nhiều đến khả năng của hệ quản trị CSDL mạnh. Do đó, việc phân phối kèm hệ CSDL nhúng SQLite cho phép nhà phát triển có thêm công cụ sẵn sàng để lưu trữ và truy vấn dữ liệu bằng phương thức SQL mà không cần cài đặt hệ CSDL riêng biệt nào cả. SQLite xử lý chính xác các truy cập khóa chặn (locking) và truy cập đồng thời (concurrent), hai vấn đề nổi cộm khi xử lý các file dữ liệu phẳng (flat file) tự tạo.

SQLite đủ mạnh để xử lý phần lớn các nhu cầu lưu trữ và thao tác dữ liệu thông thường. Nó hỗ trợ:

  1. Chuyển tác (transactions):
  2. Truy vấn con (Subqueries)
  3. Kiểm soát toàn vẹn tham chiếu (triggers)
  4. Nhiều tính năng cao cấp liên quan đến CSDL như hỗ trợ View…

SQLite tương thích với phần lớn các tính năng chuẩn SQL92, tuy nhiên bản 3.0 mới nhất chưa hỗ trợ chuyển tác lồng nhau, ràng buộc khóa ngoại, cũng như hỗ trợ kiểm soát toàn vẹn tham chiếu một cách đầy đủ. Bạn thậm chí có thể viết các hàm cho người sử dụng tự định nghĩa bằng PHP và gọi chúng bên trong SQLite. Đây là tính năng nổi bật nhất từ trước đến nay có được trong một mô đun mở rộng liên quan đến CSDL trong PHP.

Cơ chế xử lý lỗi sáng sủa hơn với Exceptions

PHP 5 cung cấp một mô hình kiểm tra lỗi hoàn toàn khác so với PHP 4. Nó có tên là xử lý lỗi ngoại lệ. Với lỗi ngoại lệ, nhà phát triển được giải phóng khỏi việc phải kiểm tra giá trị trả lại của tất cả các hàm. Thay vào đó, bạn có thể tách biệt luận lý lập trình xử lý lỗi và đặt chúng nằm bên cạnh các khối mã.

Lỗi ngoại lệ thường được thấy ở các ngôn ngữ lập trình hướng đối tượng như Java và C++. Hiện tại, chỉ có một số ít mô đun mở rộng của PHP sử dụng lỗi ngoại lệ, nhưng dần dần điều này sẽ được thực hiện đồng bộ. Tuy nhiên, bạn có thể sử dụng lỗi ngoại lệ cho bất cứ đoạn mã PHP nào của mình.

Bản thực thi SOAP cao cấp

SOAP là thành phần chủ yếu của lĩnh vực dịch vụ web đang phát triển rất nhanh. Hỗ trợ SOAP trong PHP 4 chỉ ở cấp trung bình, không chỉ là việc có rất ít các gói SOAP mà còn ở chỗ các gói quan trọng nhất viết bằng PHP thay vì C nên chậm.

Với PHP 5, cuối cùng chúng ta đã có một mô đun mở rộng cho SOAP viết bằng C. Hiện tại, mô đun này thực thi được phần lớn, mặc dù không phải là tất cả các đặc điểm nêu trong SOAP 1.2. Trong tương lai, mô đun này sẽ được cải thiện nhiều hơn. Hiện tại, so với .NET hay Java thì hỗ trợ SOAP trong PHP vẫn bị xếp ở chiếu dưới.

 

Bộ lặp (Iterator)

Các bộ lặp là tính năng hoàn toàn mới trong PHP 5.0. Chúng cho phép bạn sử dụng vòng lặp for-each để lặp vòng qua các kiểu dữ liệu khác nhau: danh sách thư mục, tập kết quả CSDL và cả tài liệu XML. SPL – Thư viện PHP chuẩn – là tập các bộ lặp cung cấp chức năng này cùng với các chức năng lọc, giới hạn, ghi bộ nhớ đệm và thay đổi kết quả bộ lặp.

Bộ lặp là cách làm thủ công rất hay để loại đi tất cả các đoạn mã gây nhiễu trong mã nguồn của bạn.

Ví dụ, bộ lặp DirectoryIterator biến việc lặp qua các thư mục từ cách viết:

$dir = opendir($path);

while (false !== ($file = readdir($dir))) {

print ‘$file\n’;

}

closedir($dir);

thành cách viết:

foreach (new DirectoryIterator($path) as $file) {

print ‘$file\n’;

}

Như vậy là không có con trỏ tham chiếu thư mục nào nằm lộn xộn vào đó, cũng như không có điều kiện so sánh thiếu trong sáng nào cần phải kiểm tra bên trong vòng lặp.

Ngoài các điểm nổi bật trên, PHP 5.0 còn cung cấp:

  • Cải tiến dòng (streams), bộ bao (wrapper) và bộ lọc (filter).

Dòng là khái niệm được đưa ra trong PHP 4.3, nhưng trước PHP 5.0 nó là phần ít được dùng đến. Những cải tiến được đưa vào từ bản Beta 3 của PHP 5.0 cho phép đặt giao diện file vào việc đọc và viết dữ liệu bằng cách sử dụng các đối tượng phụ thuộc theo giao thức, mà thường được nhắc đến với cái tên bộ bao. Dòng cũng cho phép thay đổi việc truyền dòng dữ liệu qua chúng bằng cách đính kèm vào đó các bộ lọc.

  • Nội soi mã bằng cách sử dụng các lớp Reflection.

Tập hợp các lớp này cho phép bạn kiểm tra các lớp, các phương thức, các tham số và những thứ khác để thăm dò các thuộc tính của đối tượng. Với chúng, bạn có thể dễ dàng tạo ra các bộ thăm dò lớp, các bộ dò lỗi PHP và các công cụ khác dựa vào việc thu thập các chi tiết về đối tượng và hàm.

  • Sinh mã HTML chuẩn nhờ Tidy.

Mô đun mở rộng Tidy giúp bạn dễ dàng nắm chắc việc sinh mã HTML và XHTML hợp lệ. Bộ phân tách thông minh của nó thậm chí còn biến các trang viết mã tùy tiện nhất trở thành các trang tuân thủ chặt chẽ các đặc tả mới nhất của W3C.

  • Xử lý dòng lệnh ưu việt hơn

Phiên bản dòng lệnh PHP5 giờ đây cho phép xử lý từng dòng riêng lẻ, giống như Perl và awk. Bạn có thể xác định mã cần chạy ở đầu, ở giữa và ở cuối của từng dòng trong một file.ÿ