Có gì mới trong PHP 5.3, Phần 5: Nâng cấp từ PHP 5.2

Các thay đổi, tính tương thích, và sự không chấp thuận

Loạt bài "Có gì mới trong PHP V5.3" bao hàm các đặc điểm mới và hứng thú trong bản PHP V5.3, nó đã được lên lịch để phát hành sớm. Phần 1 xem xét các thay đổi về lập trình hướng đối tượng và xử lý đối tượng trong PHP V5.3, Phần 2 xem xét các hàm lambda và bao đóng. Trong Phần 3, chúng ta đã xem xét về không gian tên, là một trong các tính năng được đoán trước nhiều nhất và gây tranh cãi nhất trong bản phát hành này của PHP. Trong Phần 4, chúng ta đã xem xét kỹ hơn về Phar, là một định dạng tệp nén có thể sử dụng được trong PHP. Trong phần cuối cùng của loạt bài này, hãy tìm hiểu về các vấn đề để cân nhắc khi nâng cấp từ bản PHP V5.2. Có các thay đổi làm phá vỡ tính tương thích ngược và các đặc tính bị không chấp thuận trong bản PHP V5.3 đối với việc loại bỏ trong các bản sau này. Một số nâng cao cho các đặc tính hiện tại trong PHP cũng được đề cập.

John Mertic, Kỹ sư phần mềm, SugarCRM

John Mertic đã tốt nghiệp đại học ngành Khoa học Máy tính của Đại học Quốc gia Kent và hiện là kỹ sư phần mềm tại SugarCRM. Ông có nhiều đóng góp vào các dự án mã nguồn mở, đáng kể nhất là các dự án PHP; ông là người tạo ra và duy trì Bộ Cài đặt PHP trên Windows (PHP Windows Installer).



06 11 2009

Giới thiệu

Loạt bài này đã tập trung vào các đặc tính mới trong bản PHP V5.3, như không gian tên, bao đóng, xử lý đối tượng, lập trình hướng đối tượng, và Phar. Trong khi các đặc tính hào nhoáng mới này là bổ sung được hoan nghênh vào ngôn ngữ, bản PHP V5.3 cũng được thiết kế để PHP hợp lý hơn. Nó xây dựng trên bản PHP V5.2 nổi tiếng và ổn định và tăng cường ngôn ngữ để làm cho nó mạnh hơn. Trong bài viết này, hãy tìm hiểu về các thay đổi và cân nhắc khi nâng cấp từ bản PHP V5.2.


Các thay đổi về cú pháp

Các bổ sung vào ngôn ngữ, với các không gian tên và bao đóng (đã bàn luận trong Phần 2Phần 3), đã thêm nhiều từ dành riêng. Khởi động trong bản PHP V5.3, namespace có thể không còn được sử dụng như một bộ định danh nữa. Lớp closure bây giờ là một lớp dành riêng, nhưng nó vẫn là một bộ định danh hợp lệ. Liệt kê 1 cho thấy các ví dụ về các lệnh không còn dùng trong bản PHP V5.3, do bổ sung các từ dành riêng.

Liệt kê 1. Các câu lệnh PHP không hợp lệ
// the function definition below will throw a fatal error in PHP 5.3, but is perfectly 
// valid in 5.2
function namespace() 
{
....
}

// same with this class definition
class Closure
{
....
}

Hỗ trợ cho lệnh goto cũng được thêm trong PHP V5.3. Bây giờ goto là một từ dành riêng. Các lệnh goto không còn thông dụng trong các ngôn ngữ hiện đại (bạn có thể nhớ việc sử dụng chúng trong BASIC), nhưng đôi khi vẫn có trường hợp mà chúng tiện lợi. Liệt kê 2 có một ví dụ về cách chúng làm việc.

Liệt kê 2. Các câu lệnh goto
echo "This text will get outputted";
goto a;

echo "This text will get skipped";

a:
echo "This text will get outputted";

Một ca sử dụng khả dĩ đối với các goto là để thoát ra vòng lặp lồng và các câu lệnh if. Việc này cho phép đọc mã rõ ràng hơn.


Thay đổi về các hàm và phương thức

Mặc dù không có các thay đổi lớn đối với các hàm và phương thức trong PHP V5.3, vẫn có một vài nâng cao để giúp giải quyết các vấn đề còn tồn tại trong PHP và để cải thiện hiệu năng. Phần này bàn về một số thay đổi đáng chú ý hơn.

Trong các phiên bản trước của PHP, các hàm mảng atsort, natcasesort, usort, uasort, uksort, array_fliparray_unique chỉ duy nhất cho phép bạn chuyển các đối tượng thay cho các mảng đối với các tham số. Các hàm sau đó sẽ xử lý các thuộc tính của các đối tượng như các khoá và giá trị mảng. Điều này không còn nữa trong bản PHP V5.3, do đó bạn cần phải bố trí trước tiên các đối tượng sang các mảng. Liệt kê 3 chỉ ra cách thay đổi bộ mã của bạn.

Liệt kê 3. Thay đổi mã để các đối tượng thay cho các mảng đối với một vài hàm
$obj = new stdClass;
$obj->a = '1';
$obj->b = '2';
$obj->c = '3';

print_r(array_flip($obj)); // will NOT work in PHP 5.3, but will in PHP 5.2

print_r(array_flip((array) $obj)); // will work in PHP 5.3 and 5.2

Các phương thức lớp bây giờ bị áp đặt chặc chẽ hơn. Các phương thức sau đây được thấy công khai:

  • __get
  • __set
  • __isset
  • __unset
  • __call

Bạn có thể sử dụng phương thức ma thuật mới __callStatic() trong các trường hợp khi __call đã được sử dụng trong một ngữ cảnh tĩnh như một cách giải quyết khác đối với sự thay đổi này. Các đối số cần cho cho các phương thức này bị áp đặt, và phải thể hiện với ngoại lệ của phương thức ma thuật __isString(), chấp nhận không có tham số. Liệt kê 4 chỉ ra cách sử dụng các phương thức này và các tham số được yêu cầu đối với chúng.

Liệt kê 4. Sử dụng các phương thức ma thuật
class Foo
{
    public function __get($key) {} // must be public and have one parameter
    public function __set($key,$val) {} // must be public and have two parameters

    public function __toString() {} must be public and have no parameters
}

Một số hàm mà trước đây không hỗ trợ về PHP với Windows bây giờ đã được hỗ trợ trong PHP V5.3. Ví dụ hàm getopt() được thiết kế để phân tích cú pháp các tuỳ chọn để gọi một kịch bản lệnh PHP từ dòng lệnh. inet_ntop()inet_pton(), các hàm mã hoá và giải mã địa chỉ internet, bây giờ cũng làm việc dưới Windows®. Có một số hàm toán học, như asinh(), acosh(), atanh(), log1p()expm1(), nay được Windows hỗ trợ.


Các thay đổi về phần mở rộng

Thư viện C Mở rộng của PHP – PECL (PHP Extension C Library), đã trở thành miền đất phát sinh cho các phần mở rộng mới trong PHP. Khi một phần mở rộng đã hoàn thiện và ổn định và được xem như là một chức năng bổ ích đối với một phần của sự phân bố cốt lõi, nó thường được thêm khi thay đổi các phiên bản chính. Trên tinh thần đó, khi khởi động với bản PHP V5.3, các phần mở rộng sau đây là một bộ phận của phân phối PHP cốt lõi (core PHP distribution).

FileInfo
Cung cấp các hàm giúp phát hiện kiểu nội dung và mã hoá của một tệp bằng cách xem xét một vài chuỗi ký tự byte ma thuật trong tệp.
intl
Một trình bao bọc (wrapper) cho thư viện Các thành phần Quốc tế đối với Unicode (ICU), cung cấp các hàm để hỗ trợ unicode và toàn cầu hoá.
Phar
Một công cụ lưu trữ PHP thảo luận trong Phần 4.
mysqlnd
Một trình điều khiển PHP riêng để truy cập cơ sở dữ liệu MySQL mà là một sự thay thế cho bản MySQL trước và phần mở rộng MySQLi làm đòn bẩy cho thư viện leveraged libmysql.
SQLite3
Một thư viện để sử dụng các cơ sở dữ liệu SQLite V3.

Khi một phần mở rộng không được tích cực bảo trì tiếp, hoặc bị coi là không còn giá trị phân phối với phân phối PHP lõi, nó thường được chuyển đến PECL. Là một bộ phận luôn thay đổi trong PHP V5.3, các phần mở rộng sau đây đã bị loại bỏ từ phân phối PHP lõi và được bảo trì như một bộ phận của PECL.

ncurses
Mô phỏng về tai ương, sử dụng để hiển thị đầu ra đồ hoạ trên dòng lệnh.
fpdf
Quản lí kiến trúc và dùng các khuôn dạng và dữ liệu về khuôn dạng trong các tài liệu PDF.
dbase
Cung cấp hỗ trợ việc đọc và ghi các tệp tương thích với dbase.
fbsql
Hỗ trợ truy cập cơ sở dữ liệu cho các máy chủ cơ sở dữ liệu Frontbase.
ming
Một thư viện mã nguồn mở cho phép bạn tạo các hoạt hình flash 4.

Phần mở rộng Sybase đã được loại bỏ hoàn toàn và được thay thế bằng phần mở rộng sybase_ct. Phần mở rộng sybase_ct tương thích đầy đủ với bản trước và sẽ là một thay thế mới (drop-in replacement). Hàm mới hơn sẽ sử dụng các thư viện Sybase phía khách, cần cài đặt trên máy chủ Web của bạn.


Các thay đổi về kiến trúc

Với sự tập trung mạnh mẽ vào việc tinh lọc quá trình đã dựng trong PHP V5.3, nó thật dễ kiến trúc nên PHP trên tất cả các nền. Để bảo trì sự nhất quán giữa các kiến trúc PHP và để cung cấp sự đảm bảo của tập các thành phần trong PHP, PCRE, Reflection, và SPL, các phần mở rộng có thể không còn bị vô hiệu hoá trong kiến trúc đó. Bạn có thể xây dựng nên các ứng dụng PHP phân phối được, sử dụng các phần mở rộng này và đảm bảo rằng chúng sẽ sẵn có để sử dụng.

Một nhóm làm việc mới đã tiếp quản kiến trúc PHP Windows vào năm ngoái. Bắt đầu về PHP V5.3, nhóm sẽ cung cấp một vài cải tiến cho những người sử dụng trên Windows. Các kiến trúc mới sẽ nhằm vào kiến trúc 586 (Intel® Pentium® mới hơn) và sẽ cần bản Windows 2000/XP hoặc mới hơn, loại bỏ hỗ trợ các bản Windows 98/NT và trước đó. Các kiến trúc PHP với Microsoft® Visual Studio® 2008 và các kiến trúc nhằm đến kiến trúc x86-64 sẽ được xây dựng. Chúng đưa ra cải thiện hiệu năng khi làm việc với FastCGI trên máy chủ Web Microsoft IIS hoặc với Apache được dựng nên với cùng một kiến trúc và trình biên dịch. Bộ cài đặt Windows cũng được cải thiện để lập cấu hình PHP tốt hơn với máy chủ Microsoft IIS web. Nhóm làm việc đã khởi chạy một trang web dành riêng cho PHP trên Windows (xem Tài nguyên).


Các thay đổi về .ini

Một đặc tính quan trọng của PHP là ở chỗ hành vi của nó có thể được lập cấu hình bằng cách sử dụng một tệp .ini. Trong PHP V5.3, một số lời hướng dẫn khó hiểu cho tệp này đã được loại bỏ, chẳng hạn như thiết lập kiểu tương thích zend.ze1. Bây giờ bạn đã cải thiện được độ linh hoạt rất lớn khi sử dụng tệp này.

Có hai cải tiến chính về tệp php.ini:

  • Bạn có thể có các biến trong tệp php.ini. Điều này là rất tiện lợi đối với việc loại bỏ những thứ thừa trong tệp, và dễ cập nhật tệp nếu các thay đổi là cần thiết. Liệt kê 5 chỉ ra một ví dụ.
    Liệt kê 5. Các biến trong tệp php.ini
    foo = bar 
    
    [section] 
    newfoo = ${foo}
    foonewfoo có cùng một giá trị.
  • Bạn có thể thiết lập PHP ini trên từng thư mục (per-site) và từng vị trí (per-directory), tương tự như thiết lập đối với các tệp cấu hình của Apache. Ưu điểm ở đây là cú pháp trở nên nhất quán đối với tất cả các PHP SAPI khác nhau mà chạy theo chúng. Liệt kê 6 cho thấy việc này thực hiện ra sao.
    Liệt kê 6. Thiết lập các tệp .ini trên từng vị trí và trên từng thư mục
    [PATH=/var/www/site1] 
    
    ; directives here only apply to PHP files in the /var/www/site1 directory 
    
    [HOST=www.example.com] 
    
    ; directives here only apply to PHP files requested from the www.example.com site.

Bạn cũng có thể cho các chỉ thị .ini này được tạo ra trong các tệp user_specified.ini, nằm trong chính hệ thống tệp, với cùng một cách mà các tệp .htaccess làm việc dưới máy chủ Web Apache HTTP. Tên mặc định cho tệp này được quy định bởi chỉ thị uer_ini.filename. Đặc tính này có thể bị vô hiệu hoá bằng cách thiết lập chỉ thị này ở một giá trị rỗng. Bất kỳ chỉ thị trên từng vị trí và trên từng thư mục đều không thể bị phủ nhận trong tệp user_specified.ini.


Các mục không chấp thuận

PHP V5.3 bắt đầu chính thức không chấp thuận các hàm cũ, những cái sẽ không còn sẵn có để dùng nữa trong các phiên bản PHP sau này. Khi bạn sử dụng các hàm này, sẽ có một lỗi E_DEPRECATED được đưa ra. Các hàm sau đây bị loại bỏ đối với bản PHP V5.3:

  • Các ngắt (declare(ticks=N)register_tick_function() ), được thiết kế để gọi hàm sau mỗi n câu lệnh được thực hiện bởi bộ phân tích cú pháp trong khối declare(). Chúng bị loại do nhiều ngắt trong hàm của chúng và do đặc tính này không thường được sử dụng.
  • define_syslog_variables(), khởi tạo tất cả các biến liên quan đến syslog. Hàm không cần vì các hằng số nó xác định đã là tổng quát. Loại bỏ đơn giản hàm này sẽ là cần thiết.
  • Các hàm biểu thức chính qui ereg. Bạn rất nên sử dụng các hàm biểu thức chính qui PCRE, do chúng nhanh hơn và ổn định hơn với các biểu thức chính qui được sử dụng trong các ngôn ngữ và ứng dụng khác. Việc hỗ trợ cho các hàm ereg bị loại nên PHP có thể tiêu chuẩn hoá với bộ biểu thức chính qui.

Bạn nên chuyển đi khỏi các đặc tính này với PHP V5.3. Các bản phát hành PHP chính sau này sẽ lược bớt hỗ trợ cho các mục nói trên.


Tóm tắt

Bản PHP V5.3 có nhiều đặc tính mới và có một số mục đã được “dọn sạch”. Có một số vấn đề về tương thích ngược. Bài viết này cung cấp một số hướng dẫn về cách di trú ứng dụng Web của bạn để làm việc với PHP V5.3. Để có các thông tin chi tiết mới nhất về PHP V5.3 xin xem PHP wiki (trang mạng biên tập tự do), nó có các chú giải về mọi thay đổi khác có thể ảnh hưởng đến các ứng dụng của bạn.

Tài nguyên

Học tập

  • Tìm hiểu thêm về bao đóng từ Wikipedia.
  • PHP dùng cho Windows được cống hiến cho việc hỗ trợ PHP trên Microsoft Windows. Nó cũng hỗ trợ các cổng của các phần mở rộng hoặc đặc tính PHP, và cung cấp các kiến trúc đặc biệt cho các kiến trúc Windows khác nhau.
  • Xem trang PHP wiki để tìm hiểu mọi thứ về các thay đổi đối với PHP V5.3.
  • Đọc "Một hướng dẫn về di trú PHP V5" để tìm hiểu cách di trú mã được phát triển trong PHP từ V4 đến V5.
  • "Kết nối các ứng dụng PHP với Apache Derby" chỉ cho bạn cách cài đặt và lập cấu hình PHP trên Windows (một vài bước có thể áp dụng với Linux®).
  • Để có loạt bài hướng dẫn của developerWorks về tìm hiểu cách lâp trình bằng PHP, xem "Tìm hiểu PHP, Phần 1," Phần 2Phần 3.
  • Planet PHP là nguồn tin tức của cộng đồng các nhà phát triển PHP.
  • Tài liệu PHP Manual có các thông tin về các đối tượng dữ liệu PHP và các khả năng của chúng.
  • Thăm trang Safari Books Online để có các nguồn phong phú về các công nghệ mã nguồn mở.
  • PHP.net là tài nguyên trung tâm dành cho các nhà phát triển PHP.
  • Xem trang "Danh sách các tài liệu PHP nên đọc."
  • Duyệt qua toàn bộ nội dung PHP trên developerWorks.
  • Follow developerWorks on Twitter.
  • Mở rộng các kỹ năng PHP của bạn bằng cách xem trang Các tài nguyên dự án PHP của IBM developerWorks.
  • Lắng nghe các phỏng vấn và thảo luận thú vị cho các nhà phát triển phần mềm, xem trang developerWorks podcasts.
  • Sử dụng cơ sở dữ liệu với PHP? Hãy thử Zend Core for IBM, đó là một môi trường phát triển và chạy sản xuất PHP liền khối, sẵn để dùng ngay, dễ dàng cài đặt và có hỗ trợ DB2 V9 của IBM.
  • Theo sát các sự kiện kỹ thuật và các buổi phát tin trên mạng.
  • Theo dõi các hội nghị sắp được tổ chức, các triển lãm thương mại, các buổi phát thanh trên mạng và các sự kiện khác trên khắp thế giới được các nhà phát triển mã nguồn mở của IBM quan tâm.
  • Truy cập trang Open source zone của developerWorks để có các thông tin về cách làm thế nào, các công cụ, và cập nhật đối tượng sâu hơn để giúp bạn phát triển các công nghệ mã nguồn mở và sử dụng chúng bằng các sản phẩm của IBM.
  • Xem và tìm hiểu về IBM và các công nghệ mã nguồn mở và các chức năng của sản phẩm các trình diễn miễn phí developerWorks Theo yêu cầu.

Lấy sản phẩm và công nghệ

  • PHPMyAdmin là một ứng dụng PHP phổ biến mà đã được gói trong Phar để sử dụng như là một ví dụ về việc sử dụng dễ dàng tệp nén Phar.
  • Nhận sản phẩm PHP V5.2.6.
  • Đổi mới dự án phát triển mã nguồn mở tiếp theo của bạn bằng phần mềm chạy thử của IBM, có sẵn để tải về hoặc trên DVD.
  • Tải về các phiên bản chạy thử của sản phẩm IBM và bắt tay vào các công cụ phát triển ứng dụng và các sản phẩm phần trung gian từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=444970
ArticleTitle=Có gì mới trong PHP 5.3, Phần 5: Nâng cấp từ PHP 5.2
publish-date=11062009