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.

CÀI ĐẶT PHP 5 VỚI APACHE 2.0.X VÀ MYSQL TRÊN WINXP

Các phần mềm cần thiết:
Microsoft Windows XP hoặc Windows 2000 (tôi chưa test trên Windows 98).
Apache 2.0.x (tôi dùng Apache 2.0.50). Bạn có thể tải về phiên bản Apache 2.0.50 mới nhất cho Win32 ở địa chỉ http://httpd.apache.org/.
PHP 5.0 (tôi sẽ cài PHP 5 như là một mô đun của Apache, theo cách mà người ta cài PHP cho các máy chủ). Bạn tải phiên bản PHP 5.0 bản chính thức tại http://www.php.net/download hoặc các bản phát triển tại http://snaps.php.net.
MySQL 4.0 bản mới nhất có thể tải về từ http://dev.mysql.com/get/Downloads/MySQL-4.0/mysql-4.0.20d-win.zip/from/pick#mirrors.
CÀI ĐẶT APACHE 2.0
Apache 2.0.x có trình cài đặt tự động và bạn sẽ không gặp nhiều khó khăn để cài đặt phần mềm máy chủ web này trên Windows. Ví dụ, để cài Apache 2.0.50, bạn chỉ việc tải về một file có tên  apache_2.0.50-win32-x86-no_ssl.msi và chạy nó. Theo mặc định nó được cài đặt vào c:\Program Files\Apache Group\Apache2\. Tuy nhiên, để tiện việc quản lý máy chủ và các mô đun đi kèm, tôi cài nó vào c:\webserver\Apache2\. Bạn có thể tham khảo bài viết hướng dẫn trực quan bằng hình ảnh tại http://www.opensourcevn.org/javavietnam.
Sau khi cài đặt xong, bạn hãy tạm tắt Apache. Tuy nhiên, bạn có thể không cần làm việc này cho đến khi bạn sửa đổi file cấu hình của Apache ở dưới.
CÀI ĐẶT PHP 5.0
Hiện tại PHP 5 chưa có trình tự động cài đặt. Bạn tải về từ PHP.net file php-5.0.0-Win32.zip với dung lượng chừng 7.6 MB. Giải nén file này vào thư mục mà bạn chọn. Để tiện quản lý, tôi giải nén vào c:\webserver\php5.
Sau khi giải nén, bạn sẽ thấy PHP 5 có một cấu trúc thư mục khác hẳn với PHP 4. Lý do là PHP đã được viết lại gần như toàn bộ để có được những cải thiện về tính năng và tốc độ. Tuy nhiên, bạn không cần phải lo lắng, tất cả những gì bạn cần làm sau khi giải nén là tìm đến tệp tin php.ini-recommended và thực hiện các bước sau:
–  Chép nó vào thư mục Apache đã nói đến ở trên và đổi tên nó thành php.ini (c:\webserver\Apache2\php.ini).
–  Dùng trình soạn thảo văn bản thuần túy như NotePad hay EditPlus để mở file này.
–  Tìm đến dòng
extension_dir =’./’
và thay nó bằng
extension_dir =’c:\webserver\php5\ext’
–  Tìm đến dòng
; extension=php_mysql.dll
và bỏ dấu ‘;’ ở đầu dòng (áp dụng khi bạn cần dùng các hàm PHP xử lý dữ liệu chứa trong MySQL).
Ngay từ khi phiên bản PHP 5.0 Beta ra mắt lần đầu tiên, các nhà phát triển đã thông báo là nó được thiết lập mặc định không làm việc với MySQL vì trong bộ cài PHP 5.0 đã có chứa SQLite, một hệ quản trị CSDL nhúng, chạy cực nhanh, đủ tính năng để dùng cho doanh nghiệp nhỏ. Ngoài ra, lý do chủ yếu là vấn đề giấy phép GPL. Tuy nhiên, nếu cần đến một hệ quản trị CSDL cao cấp hơn như MySQL thì PHP 5 cho phép bạn cấu hình lại để sẵn sàng làm việc. Nếu không chú ý đến điều này, bạn có thể sẽ gặp phải lỗi như sau:
Fatal error: Call to undefined function mysql_connect() in c:\webserver\webroot\text\textpattern\lib\txplib_db.
php on line 15
–  Cũng trong file php.ini này, bạn tìm đến dòng
;session.save_path
và điều chỉnh nó thành
session.save_path = ‘c:\webserver\php5\tmp’
(tùy theo thư mục mà bạn cài đặt PHP5).
–  Kế tiếp, tìm đến dòng [mail function], bên dưới mấy dòng bạn sẽ thấy dòng
;sendmail_from
Hãy bỏ dấu ‘;’ ở đầu dòng và thay đổi địa chỉ email theo ý bạn.
Ví dụ:
localhost@phpvietnam.net
Cấu hình này sẽ được sử dụng đến khi bạn lập trình với hàm mail() trong PHP để gửi nhận mail với một máy chủ email cài sẵn như QK Server.
–  Vào thư mục con ext trong thư mục PHP 5 (ví

dụ, c:\webserver\php5\ext) và kiểm tra xem đã có file php_mysql.dll ở đó chưa. Đây là thư viện để PHP 5 xử lý các lệnh gọi hàm xử lý dữ liệu với MySQL. Nếu bạn tải về PHP 5.0 bản chính thức thì file này chắc chắn có ở đó. Nhưng nếu bạn dùng các bản PHP 5.0 đang được phát triển và xuất ra dưới dạng snapshot (http://snaps.php.net) thì file này có thể bị bỏ ra ngoài. Nếu vậy, bạn hãy tìm nó trong thư mục giải nén và chép nó vào thư mục con ext.
–  Chép file libmysql.dll trong thư mục PHP 5 vào thư mục c:\Windows\system32 hoặc thư mục bin của Apache 2 (ví dụ, c:\webserver\Apache2\bin\). Nếu không thực hiện bước này, bạn có thể sẽ gặp lỗi ‘can’t load c:\webserver\php5\ext\php_mysql.dll’.
–  Kế tiếp, hãy vào thư mục con conf của Apache và tìm đến file httpd.conf. Nếu cài Apache 2.0.x theo mặc định thì đường dẫn của nó là c:\Program Files\Apache Group\Apache2\conf\httpd.conf. Trong trường hợp của tôi, nó nằm ở c:\webserver\Apache2\conf\httpd.conf. Mở file này với trình soạn thảo văn bản thuần túy và tìm đến dòng
#LoadModule ssl_module modules/mod_ssl.so
Bạn bổ sung thêm hai dòng sau vào dưới dòng này:
LoadModule php5_module ‘c:/webserver/php5/php5apache2.dll’
AddType application/x-httpd-php .php
Dòng LoadModule sẽ cho phép Apache nạp mô đun thư viện gọi PHP 5 thực hiện các tác vụ xử lý liên quan đến các file php. Bạn cần chú ý thay đổi đường dẫn file php5apache2.dll tùy theo trường hợp của bạn.
Bây giờ là lúc khởi động lại Apache 2. Nếu không có lỗi nào, ở khay hệ thống xuất hiện như hình 1.

CÀI ĐẶT MYSQL 4.0
Như vậy bạn đã cấu hình xong PHP 5.0 và Apache 2.0 để chúng chạy được cùng nhau. Bạn cũng đã cấu hình để các hàm của PHP 5.0 truy vấn được MySQL 4.0. Tuy nhiên bạn cần cài đặt thêm MySQL 4.0 để có đủ công cụ lập trình PHP 5. Việc cài đặt MySQL 4.0.20 khá đơn giản. Bạn chỉ việc tải về một file .zip. Giải nén và chạy file setup.exe. Phần mềm MySQL sẽ tự động cài đặt vào thư mục mặc định c:\mysql. Sau đó bạn vào thư mục c:\mysql\bin để chạy file winmysqladmin.exe. Khi chạy chương trình này bạn sẽ thấy hiện ra cửa sổ như hình 2.

Cửa sổ này cho phép bạn cung cấp tên/mật khẩu của người có toàn quyền quản trị MySQL Server. Thường thì cặp tên/mật khẩu này là root/localhost hoặc bạn cũng có thể để trắng mật khẩu theo mặc định. Sau khi nhập xong và ấn nút OK, cửa sổ này biến mất và trên khay hệ  thống sẽ xuất hiện biểu tượng dịch vụ của MySQL Server như hình 3.

Như vậy, bạn đã có MySQL Server chạy trên máy tính của mình và sẵn sàng xử lý các câu truy vấn.
KIỂM TRA KẾT QUẢ CÀI ĐẶT
Để kiểm tra lại công việc cài đặt, bạn thực hiện hai bước sau:
Vào thư mục gốc phục vụ web của Apache 2 (Apache2\htdocs), và dùng trình soạn thảo văn bản thuần túy như Notepad để tạo ra một file có tên phpinfo.php với nội dung:
<?php
echo phpinfo();
?>
Mở trình duyệt và gõ vào địa chỉ http://localhost/phpinfo.php. Bạn sẽ thấy hiện ra toàn bộ cấu hình của PHP 5. Hãy bật cửa sổ của chương trình Apache Service Monitor và bạn sẽ thấy như hình 4.

Bây giờ bạn đã có thể lập trình với PHP 5. Chúc các bạn thành công.

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.ÿ

Phạm Công Định
PHPVietnam
pcdinh@yahoo.com

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

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: