PDF:

Có gì mới trong PHP 5.3, Phần 3: Không gian tên
John Mertic
Kỹ sư phần mềm
SugarCRM
06 11 2009
PHP V5.3 được lên lịch để phát hành sớm. Loạt bài "Có gì mới trong PHP V5.3" này bao
hàm các tính năng mới và thú vị trong bản phát hành này. Phần 1 của loạt bài xem xét các
thay đổi cho lập trình hướng đối tượng và xử lý đối tượng trong PHP 5.3. Phần 2 xem xét các
hàm lambda và các bao đóng. Trong Phần 3 dưới đây, chúng ta xem xét các không gian tên
(namespaces), 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. Khái niệm về không gian tên đảm bảo cách trợ giúp tránh
các vấn đề về nhiều hàm, lớp, và các hằng của cùng tên được định nghĩa nhiều lần.
Xem thêm bài trong loạt bài này
Không gian tên tồn tại trong nhiều ngôn ngữ, gồm ngôn ngữ lập trình C++ và Java™. Chúng xuất
hiện để giúp đỡ với việc tổ chức các cơ sở mã lớn, nơi thường có một mối lo ngại về chồng chéo
hàm hoặc các tên lớp với ứng dụng và các vấn đề mà có việc đó xảy ra. Việc sử dụng các không
gian tên có thể giúp nhận ra hàm hoặc công cụ nào mà mã đó cung cấp, hoặc thậm chí giúp xác
định nguồn gốc của nó. Một ví dụ về điều này là không gian tên Hệ thống trong C#, có chứa tất cả
các hàm và lớp được .NET framework cung cấp.
Trong các ngôn ngữ khác không có các không gian tên chính thức (chẳng hạn như các bản PHP
V5.2 và trước đó), những người thường sẽ bắt chước các không gian tên bằng cách cố gắng sử dụng
một quy ước đặt tên riêng trong các tên lớp hoặc tên hàm. Zend Framework thực hiện việc này,
mỗi tên lớp bắt đầu bằng Zend, và mỗi không gian tên con (child namespace) được tách riêng bằng
một nét gạch dưới (underscore). Ví dụ, định nghĩa lớp Zend_Db_Table là một lớp, bộ phận của Zend
Framework và có chức năng cơ sở dữ liệu. Một vấn đề với cách tiếp cận này là ở chỗ mã kết quả có
thể trở nên dài dòng (verbose), nhất là khi lớp hoặc hàm đó sâu vài lớp (Zend_Cache_Backend_Apc
là một ví dụ về việc này từ Zend Framework). Một vấn đề nữa là toàn bộ mã phải phù hợp với kiểu
này, có thể khó khăn nếu bạn đang tích hợp mã của bên thứ ba trong một ứng dụng mà không phù
hợp với quy ước đặt tên này.
Lịch sử của không gian tên trong PHP là khá vòng vèo. Lúc đầu chúng định dùng làm một bộ phận
của PHP V5, nhưng chúng đã bị loại bỏ trong các giai đoạn phát triển do việc thực hiện đúng cách
là không thành công. Cuối cùng chúng sống lại như một bộ phận của PHP V6, sau đó chuyển sang
PHP V5.3 sau khi quyết định chuyển tất cả các tăng cường không theo unicode vào bản PHP V5.x
khác, phát hành vào năm 2007. Trong khi phần lớn trạng thái của các không gian tên là không đổi
© Copyright IBM Corporation 2009
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Nhẫn hiệu đăng ký
Trang 1 của 10
developerWorks®
ibm.com/developerWorks/vn/
do thiết kế độc đáo, vấn đề về việc toán tử nào sẽ sử dụng là vấn đề lớn nhất, với các góc nhìn trái
chiều về việc nó sẽ là gì từ tất cả các thành viên của cộng đồng. Một quyết định cuối cùng để sử
dụng dấu gạch chéo ngược (\) làm toán tử đã đưa ra vào tháng 10/2008, giải quyết được tất cả các
vấn đề mà việc sử dụng các toán tử khác, đã trình bày về thiết kế ngôn ngữ và tính khả dụng.
Các không gian tên trong PHP
Mượn nhiều cú pháp và thiết kế về tên không gian từ các ngôn ngữ khác— nhất là C++. Tuy nhiên,
nó xử lý tên không gian khá độc đáo trong một số tình huống, mà có thể là một vật cản đối với
những người sử dụng đang mong đợi các tên không gian để làm việc giống hệt như các ngôn ngữ
khác. Trong phần này, chúng ta sẽ xem cách các không gian tên làm việc trong PHP.
Định nghĩa một không gian tên
Việc xác định một không gian tên mới là khá bình thường. Để làm như vậy, thêm vào dòng sau đây
trong Liệt kê 1 làm lệnh đầu tiên hoặc đầu ra trong một tệp.
Liệt kê 1. Định nghĩa một không gian tên
<?php
namespace Foo;
class Example {}
?>
Điều quan trọng là phải hiểu rằng việc mô tả trên đây về namespace phải là lệnh đầu tiên hoặc hoặc
đầu ra trong một tệp. Làm bất kỳ việc nào trước việc này sẽ gây ra một lỗi nghiêm trọng (fatal
error). Liệt kê 2 cho thấy một số ví dụ về việc này.
Liệt kê 2. Các cách không tốt khi định nghĩa một không gian tên
/* File1.php */
<?php
echo "hello world!";
namespace Bad;
class NotGood {}
?>
/* File2.php */
<?php
namespace Bad;
class NotGood {}
?>
Trong phần đầu của Liệt kê 2, chúng ta đã cố gắng phản hồi lại bàn điều khiển trước khi định nghĩa
không gian tên, gây nên lỗi nghiêm trọng. Trong phần thứ hai của Liệt kê, chúng ta đã thêm vào
một không gian phụ trội trước thẻ mở <?php cũng gây ra một lỗi nghiêm trọng. Điều quan trọng là
phải để ý xem đối với tình trạng này khi chúng ta viết mã của chúng ta vì đó là một sơ suất thông
thường khi làm việc với các không gian tên trong PHP.
Tuy nhiên, cả hai ví dụ trên đều có thể được viết lại bằng cách tách riêng định nghĩa không gian tên
với mã, là một bộ phận mô tả không gian tên vào một tệp riêng của nó, mà có thể được gộp vào
trong các tệp ban đầu. Liệt kê 3 trình bày việc này.
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 2 của 10
ibm.com/developerWorks/vn/
developerWorks®
Liệt kê 3. Sửa chữa các cách không tốt khi định nghĩa không gian tên
/* Good.php */
<?php
namespace Good;
class IsGood() {}
?>
/* File1.php */
<?php
echo "hello world!";
include './good.php';
?>
/* File2.php */
<?php
include './good.php';
?>
Bây giờ chúng ta đã nhìn thấy cách định nghĩa một không gian tên đối với mã trong một tệp,
chúng ta hãy xem cách vận dụng mã có không gian tên này trong một ứng dụng.
Sử dụng mã không gian tên
Có các tuỳ chọn khác nhau để gọi ra một hàm, lớp, hoặc hằng số có không gian tên. Có một cách
là tham chiếu tường minh không gian tên như là một tiếp đầu ngữ đối với lời gọi. Một tuỳ chọn khác
là định nghĩa một bí danh cho không gian tên và thêm bí danh đó vào đầu lời gọi, nó được thiết kế
để làm cho tiền tố không gian tên ngắn hơn. Và cuối cùng, chúng ta có thể chỉ cần sử dụng không
gian tên trong phạm vi mã của chúng ta, làm cho nó trở thành không gian tên mặc định và, theo
mặc định, làm cho tất cả các lời gọi tham chiếu đến nó. Liệt kê 4 minh hoạ sự khác nhau giữa các
lời gọi.
Liệt kê 4. Gọi một hàm trong một không gian tên
/* Foo.php */
<?php
namespace Foo;
function bar()
{
echo "calling bar....";
}
?>
/* File1.php */
<?php
include './Foo.php';
Foo/bar(); // outputs "calling bar....";
?>
/* File2.php */
<?php
include './Foo.php';
use Foo as ns;
ns/bar(); // outputs "calling bar....";
?>
/* File3.php */
<?php
include './Foo.php';
use Foo;
bar(); // outputs "calling bar....";
?>
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 3 của 10
developerWorks®
ibm.com/developerWorks/vn/
Liệt kê 4 trình bày các cách khác nhau để gọi ra một hàm bar() trong không gian tên Foo. Trong
tệp File1.php, chúng ta trông thấy cách làm tường minh lời gọi, mào đầu cho lời gọi với tên của
không gian tên. Tệp File2.php sử dụng một bí danh cho tên của không gian tên, nên chúng ta thay
tên của không gian tên bằng bí danh đó. Cuối cùng, File3.php chỉ cần sử dụng không gian tên, nó
cho phép chúng ta thực hiện lời gọi đến bar() mà không có bất kỳ tiền tố nào.
Chúng ta cũng có thể định nghĩa nhiều hơn một không gian tên trong một tệp bằng cách thêm vào
các lời gọi namespace nữa trong tệp. Liệt kê 5 minh hoạ việc này.
Liệt kê 5. Nhiều không gian tên trong một tệp
<?php
namespace Foo;
class Test {}
namespace Bar;
class Test {}
$a = new Foo\Test;
$b = new Bar\Test;
var_dump($a, $b);
Output:
object(Foo\Test)#1 (0) {
}
object(Bar\Test)#2 (0) {
}
Bây giờ chúng ta đã có các cơ sở về cách thực hiện một lời gọi bên trong một không gian tên,
chúng ta hãy xem xét một số tình huống phức tạp hơn và cách các lời gọi làm việc.
Giải pháp về không gian tên
Một trong những khó khăn đối với các không gian tên là tìm hiểu cách mà giải pháp về phạm vi làm
việc. Trong khi các trường hợp đơn giản như trong Liệt kê 4 là có thể hiểu được, vấn đề xuất hiện khi
chúng ta bắt đầu lồng các không gian tên vào lẫn nhau, hoặc khi chúng ta ở trong một không gian
tên và đang để ý gọi đến vùng toàn cục. PHP V5.3 có các nguyên tắc về việc giải quyết các vấn đề
này một cách tự động theo một cách có hiểu biết.
Chúng ta hãy tạo ra một số tệp gộp, tệp nào cũng có hàm hello() được định nghĩa trong nó.
Liệt kê 6. Hàm hello() được định nghĩa trong các không gian tên khác nhau
/* global.php */
<?php
function hello()
{
echo 'hello from the global scope!';
}
?>
/* Foo.php */
<?php
namespace Foo;
function hello()
{
echo 'hello from the Foo namespace!';
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 4 của 10
ibm.com/developerWorks/vn/
developerWorks®
}
?>
/* Foo_Bar.php */
<?php
namespace Foo/Bar;
function hello()
{
echo 'hello from the Foo/Bar namespace!';
}
?>
Liệt kê 6 xác định hàm hello() ba lần trong ba phạm vi khác nhau: trong phạm vi toàn cục, trong
không gian tên Foo, và trong không gian tên Foo/Bar. Tuỳ thuộc vào phạm vi trong đó lời gọi hàm
hello() được thực hiện, quyết định được hàm hello() nào được gọi ra. Một ví dụ về cách các lời
gọi này sẽ trông như trình bày dưới đây. Ở đây, chúng ta sẽ sử dụng không gian tên Foo để thấy
cách gọi hàm hello() như thế nào trong các không gian tên khác.
Liệt kê 7. Gọi ra tất cả các hàm hello() từ không gian tên Foo
<?php
include './global.php';
include './Foo.php';
include './Foo_Bar.php';
use Foo;
hello();
Bar\hello();
\hello();
?>
// outputs 'hello from the Foo namespace!'
// outputs 'hello from the Foo/Bar namespace!'
// outputs 'hello from the global scope!'
Chúng ta thấy có thể rút ngắn tiền tố không gian tên khi tham chiếu một không gian tên con trong
không gian tên hiện tại (lời gọi Foo/Bar/hello() có thể được rút ngắn thành Bar/hello()). Và
chúng ta trông thấy cách quy định mà chúng ta muốn để gọi ra phương thức trong phạm vi toàn bộ
bằng cách chỉ cần mào đầu lời gọi với toán tử không gian tên.
Bây giờ chúng ta đã có cơ chế về cách các không gian tên làm việc, hãy quan sát việc chúng ta có
thể sử dụng chúng trong mã của mình.
Các ca sử dụng đối với các không gian tên trong PHP
Mục đích tổng thể đối với các không gian tên là để giúp chúng ta tổ chức tốt hơn mã của chúng ta
bằng cách loại bỏ khối lượng các định nghĩa nằm trong phạm vi toàn cục. Trong phần này, chúng
ta sẽ xem xét một vài thí dụ có các không gian tên có thể giúp đạt được các mục tiêu này với sự cố
gắng nhỏ nhất.
Lập không gian tên của mã bên thứ ba
Nhiều ứng dụng PHP sử dụng mã từ các nguồn khác nhau, dù nó là mã được thiết kế phù hợp với
nhau như mã hiện hành trong kho chứa PEAR, mã từ các khung làm việc khác nhau như CakePHP
hay Zend Framework, hay là mã khác phát hiện ra từ các địa chỉ khác nhau trên Internet. Một
trong những vấn đề lớn nhất khi kết hợp mã này là nó không thể hoà trộn tốt với mã hiện tại; tên
các hàm hoặc lớp có thể xung đột với cái mà chúng ta đang sử dụng từ trước trong ứng dụng của
chúng ta.
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 5 của 10
developerWorks®
ibm.com/developerWorks/vn/
Một thí dụ về việc này là gói PEAR Date. Nó sử dụng tên lớp là Date, đó là một tên lớp khá chung
chung và rất có thể đang tồn tại ở đâu đó tại các địa điểm khác trong mã của chúng ta. Như vậy
có một cách tốt để khắc phục vấn đề này là thêm một lệnh không gian tên đơn giản vào đầu của
tệp Date.php trong gói đó. Bây giờ chúng ta có thể được riêng biệt khi chúng ta muốn sử dụng lớp
PEAR Date thay cho lớp của riêng chúng ta.
Liệt kê 8. Sử dụng lớp PEAR Date như đã định nghĩa trong một không gian tên
<?php
require_once('PEAR/Date.php');
use PEAR\Date;
// the name of the namespace we've specified in PEAR/Date.php
// since the current namespace is PEAR\Date, we don't need to prefix the namespace name
$now = new Date();
echo $now->getDate(); // outputs the ISO formatted date
// this example shows the full namespace specified as part of the class name
$now = new PEAR\Date\Date();
echo $now->getDate(); // outputs the ISO formatted date
?>
Chúng ta đã định nghĩa lớp PEAR Date bên trong không gian tên PEAR/Date trong tệp PEAR/
Date.php, như vậy mọi điều chúng ta cần làm là gộp mã đó vào tệp của chúng ta và sử dụng không
gian tên mới, hoặc đặt tên của không gian tên vào phía trước tên lớp hoặc hàm đó. Với cách này,
chúng ta có thể gộp bộ mã của bên thứ ba vào ứng dụng của chúng ta một cách an toàn.
Sự xung đột về tên không chỉ là vấn đề với mã của bên thứ ba. Nó cũng có thể hiện hữu với các cơ
sở mã lớn, trong đó có các bộ phận không bao giờ mong đợi đến được gần nhau. Trong phần kế
tiếp, chúng ta sẽ xem cách các không gian tên có thể đơn giản hóa tình trạng này như thế nào.
Tránh xung đột về tên hàm tiện ích
Ứng dụng PHP nào cũng có một số phương thức tiện ích. Chúng thực ra không phải là một bộ
phận của bất kỳ đối tượng nào trong ứng dụng, và chúng không thực sự bị mất quyền kiểm soát
trong bất kỳ nơi nào trong ứng dụng, mặc dù chúng đều đóng một vai trò nào đó cho ứng dụng nói
chung. Tuy nhiên chúng có thể gây ra các rắc rối về việc bảo trì khi ứng dụng của chúng ta phát
triển lên.
Một nơi mà việc này có thể trở thành vấn đề là kiểm thử mô-đun (unit testing), nơi mà chúng ta viết
ra mã để thử nghiệm mã đang chạy một ứng dụng. Phần lớn các bộ kiểm thử mô-đun (unit-testing
suites) được thiết kế để chạy từng thử nghiệm một trong toàn bộ bộ kiểm thử. Ví dụ, chúng ta có
thể có hai tệp tiện ích mà sẽ không bao giờ gộp vào với nhau, nhưng trong bộ kiểm thử, chúng
lại gộp vào nhau, do chúng ta đang kiểm thử toàn bộ ứng dụng cùng một lúc. Trong khi việc thiết
kế một ứng dụng bằng cách như vậy không bao giờ là một ý tưởng tốt đối với việc bảo trì dài hạn,
thường vẫn tồn tại trong các cơ sở mã kế thừa lớn.
Liệt kê 9 cho biết cách tránh điều này. Chúng ta có hai tệp, utils_left.php và utils_right.php, là các
tập hợp của các hàm tiện ích cho những người sử dụng thuận tay trái và tay phải. Đối với các tệp,
chúng ta định nghĩa từng tệp trong không gian tên của chính nó.
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 6 của 10
ibm.com/developerWorks/vn/
developerWorks®
Liệt kê 9. utils_left.php và utils_right.php
/* utils_left.php */
<?php
namespace Utils\Left;
function whichHand()
{
echo "I'm using my left hand!";
}
?>
/* utils_right.php */
<?php
namespace Utils\Right;
function whichHand()
{
echo "I'm using my right hand!";
}
?>
Chúng ta định nghĩa một hàm whichHand() mà đưa ra kết quả là chúng ta đang sử dụng tay nào.
Trong liệt kê 10, chúng ta thấy nó thật dễ dàng khi gộp vào một cách an toàn cả hai tệp và thay đổi
giữa hai không gian tên mà chúng ta muốn gọi.
Liệt kê 10. Ví dụ về việc sử dụng cùng nhau các tệp utils_left.php và
utils_right.php
<?php
include('./utils_left.php');
include('./utils_right.php');
Utils\Left\whichHand();
Utils\Right\whichHand();
// outputs "I'm using my left hand!"
// outputs "I'm using my right hand!"
use Utils\Left;
whichHand();
// outputs "I'm using my left hand!"
use Utils\Right;
whichHand();
// outputs "I'm using my right hand!"
Bây giờ cả hai tệp đều có thể được gộp vào nhau một cách an toàn, và chúng ta quy định không
gian tên nào sử dụng để xử lý lời gọi hàm của chúng ta. Và sự ảnh hưởng lên bộ mã hiện thời của
chúng ta là nhỏ nhất, do sự tổ chức cải tiến lại để hỗ trợ việc này chỉ yêu cầu chúng ta bổ sung lệnh
use vào đầu tệp nhằm cho biết dùng không gian tên nào.
Cũng với ý tưởng như vậy có thể được mở rộng ra ngoài bộ mã PHP đã định nghĩa của chúng ta.
Trong phần tiếp theo, chúng ta sẽ thấy cách ghi đè lên các hàm trong (internal function) trong một
không gian tên.
Ghi đè lên các tên hàm trong
Trong khi các hàm trong trong PHP thường cung cấp tiện ích to lớn, có khi chúng không thực hiện
chính xác cái mà chúng ta muốn chúng thực hiện. Chúng ta có thể cần phải gia tăng hành vi của
chúng để xứng đáng với cái mà chúng ta muốn hàm đó thực hiện, nhưng chúng ta cũng muốn xác
định lại hàm đó bằng một tên nữa nhằm tránh làm lộn xộn phạm vi đó.
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 7 của 10
developerWorks®
ibm.com/developerWorks/vn/
Các hàm hệ thống tệp (filesystem functions) là một khu vực mà chúng ta có thể muốn thực
hiện việc này. Hãy nói rằng chúng ta muốn chắc chắn rằng bất kỳ tệp nào được tạo ra bằng
file_put_contents() có tập giấy phép nào đó. Chẳng hạn như hãy nói rằng chúng ta muốn các
tệp được tạo ra bằng cái này có thuộc tính chỉ đọc; chúng ta có thể xác định lại hàm đó trong một
không gian tên mới như dưới đây.
Liệt kê 11. Định nghĩa file_put_contents() bên trong một không gian tên
<?php
namespace Foo;
function file_put_contents( $filename, $data, $flags = 0, $context = null )
{
$return = \file_put_contents( $filename, $data, $flags, $context );
chmod($filename, 0444);
return $return;
}
?>
Chúng ta gọi ra hàm trong file_put_contents() và đặt vào phía trước tên của không gian tên
với một dấu chéo ngược để cho biết rằng nó phải được xử lý trong phạm vi toàn cục, nghĩa là hàm
trong sẽ được gọi. Sau khi gọi ra hàm trong, thì chúng ta chmod() tệp để thiết lập giấy phép thích
hợp.
Đây chỉ là một vài thí dụ về các cách chúng ta có thể sử dụng các không gian tên để nâng cao bộ
mã của chúng ta. Trong mỗi trường hợp, chúng ta tránh sửa đổi tồi, chẳng hạn như đặt vào phía
trước tên của hàm hoặc lớp để làm cho chúng trở thành duy nhất. Chúng ta bây giờ cũng biết việc
sử dụng các không gian tên có thể làm cho nó an toàn hơn nhiều như thế nào để gộp vào bộ mã
của bên thứ ba trong các ứng dụng lớn, mà không phải lo lắng gì đối với các xung đột về tên.
Tóm tắt
Các không gian tên trong PHP V5.3 là một sự bổ sung vào ngôn ngữ được chào đón, giúp các nhà
phát triển tổ chức bộ mã trong một ứng dụng với một cách có hiểu biết. Chúng cho phép bạn tránh
được việc sử dụng các tiêu chuẩn đặt tên để xử lý việc lập ra các không gian tên, cho phép bạn viết
mã hiệu quả hơn nhiều. Trong khi đã xuất hiện từ lâu, các không gian tên là một sự bổ sung được
chào đón đối với bất kỳ ứng dụng PHP quy mô nào gặp phải các xung đột về tên.
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 8 của 10
ibm.com/developerWorks/vn/
developerWorks®
Tài nguyên
Học tập
• Bắt đầu loạt bài với "Có gì mới trong PHP V5.3, Phần 1: Các thay đổi đến giao diện đối tượng"
và "Phần 2: Closure và các hàm Lambda." Sau đó tiếp tục với "Có gì mới trong PHP V5.3,
Phần 4: Tạo và sử dụng các lưu trữ Phar."
• Tìm hiểu thêm về bao đóng tại trang Wikipedia.
• Xem nguyên bản Các yêu cầu bình luận RFC về các hàm lambda và bao đóng để nhận được
chi tiết hơn về cách các bao đóng làm việc như thế nào.
• Đọ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®).
• 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.
• 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ệ
• Đổ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
• Tham gia vào developerWorks blogs và vào cộng đồng developerWorks.
• Tham gia vào Hội thảo developerWorks PHP Forum: Phát triển các ứng dụng PHP với các
sản phẩm Quản trị Thông tin IBM (DB2, IDS).
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 9 của 10
developerWorks®
ibm.com/developerWorks/vn/
Đôi nét về tác giả
John Mertic
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).
© Copyright IBM Corporation 2009
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Có gì mới trong PHP 5.3, Phần 3: Không gian tên
Trang 10 của 10