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).
class=MsoNormal align=justify>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ượngMặ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.
Địa chỉ email này đang được bảo vệ khỏi chương trình thư rác, bạn cần bật Javascript để xem nó
Tham khảo:
- Những thay đổi trong PHP 5: http://www.php.net/ChangeLog-5.php
- Sách PHP5 and MySQL Bible của nhà xuất bản Wiley năm 2004.
- Sách PHP and MySQL for Dummies 2nd Edition 2004 của nhà xuất bản Wiley