9. foreach ($poems as $p ){
6.2.9. Không gian tên
Trong qu{ trình ph{t triển phần mềm, đôi khi việc đặt tên những lớp đối tƣợng, giao diện, h|m, hằng số do ngƣời lập trình định nghĩa bị trùng lặp. Để khắc phục vấn đề n|y, không gian tên (namespaces) đƣợc sử dụng. Không gian
tên trong PHP tƣơng đƣơng gói (package) trong Java và giống không gian tên
trong C. Khai báo không gian tên trong PHP theo cú pháp:
namespace NsName;
// Lớp, giao diện, hàm, hằng số thuộc Khơng_gian_tên
trong đó NsName l| tên của không gian tên. Khai b{o không gian tên phải đƣợc
đặt ở đầu tệp, ngay sau thẻ <?php. Không gian tên đƣợc khai báo theo cú pháp
WebAppDevLê Đình Thanh, Nguyễn Việt Anh
134 một tệp, cú pháp thứ hai sau đ}y đƣợc sử dụng:
namespace NsName1 {
// Lớp, giao diện, hàm, hằng số thuộc NsName1
}
namespace NsName2 {
// Lớp, giao diện, hàm, hằng số thuộc NsName2
}
Một khơng gian tên có thể chứa khơng gian tên con (subnamespaces). PHP sử dụng cú pháp tƣơng tự đƣờng dẫn thƣ mục để biểu diễn không gian tên con:
namespace NsName\SubNsName;
C{c lớp, giao diện, h|m, hằng số không đƣợc định nghĩa trong một không gian tên n|o đƣợc coi là nằm trong không gian tên to|n cục (\). Cũng có thể sử dụng khơng gian tên vơ danh để biểu thị không gian tên to|n cục nhƣ sau:
namespace , /*Khơng gian tên tồn cục*/ }
C{c không gian tên kh{c đƣợc xem nhƣ nằm trong không gian tên to|n cục. Có
thể hình dung, tồn bộ khơng gian tên của một ứng dụng có dạng nhƣ sau:
\ \namespace1 \namespace1\subnamespace11 \namespace1\subnamespace12 \namespace2 \namespace2\subnamespace21 \namespace2\subnamespace21\subsubnamespace211 ...
Tên đầy đủ của lớp, giao diện, h|m, hằng số bao gồm không gian tên ở trƣớc,
bắt đầu từ khơng gian tên tồn cục, theo sau là tên của lớp, giao diện, hàm, hằng số, theo mẫu:
\namespace\subnamespace\subsubnamespace\...\ClassName
Tên đầy đủ đƣợc sử dụng để tham chiếu đến lớp, giao diện, hàm, hằng số
thuộc không gian tên bất kỳ. Nếu lớp, giao diện không đƣợc viết với tên đầy đủ, chúng đƣợc hiểu l| thuộc không gian tên hiện tại (không gian tên chứa mã lệnh tham chiếu). Nếu h|m, hằng số không đƣợc viết với tên đầy đủ, chúng đƣợc hiểu
l| thuộc không gian tên hiện tại hoặc thuộc không gian tên to|n cục nếu khơng tìm thấy trong khơng gian tên hiện tại. Ví dụ, trong các mã lệnh sau đ}y, các lớp
WebAppDevLê Đình Thanh, Nguyễn Việt Anh
135
ClassA, ClassB, ClassC đƣợc hiểu là lần lƣợt thuộc không gian tên \abc\def,
\abc\def\ghi, \jkl; hàm dosomething() có thể nằm trong không gian tên \abc\def
hoặc không gian tên toàn cục (\); trƣờng hợp không không gian tên \abc\def
không chứa hàm dosomething(), hệ thống mới sử dụng hàm dosomething() ở khơng
gian tên tồn cục. namespace \abc\def { $a = new ClassA(); $b = new ghi\ClassB(); $c = new \jkl\ClassC(); dosomething(); }
Để không phải viết tên đầy đủ, PHP cho phép nhập v| đặt bí danh cho khơng gian tên, lớp, v| giao diện. Nhập không gian tên, lớp, giao diện theo mẫu:
use ns\subns\Classname;
sau đó chỉ cần sử dụng Classname thay cho tên đầy đủ ns\subns\Classname. Nhập
và đặt bí danh cho khơng gian tên, lớp, giao diện theo mẫu:
use ns\subns\Classname as Another;
sau đó sử dụng Another thay cho tên đầy đủ ns\subns\Classname. Ví dụ, giả sử lớp
Dog đã đƣợc định nghĩa trong không gian tên \animal, việc nhập và sử dụng bí
danh cho lớp Dog có thể đƣợc thực hiện nhƣ sau:
use animal\Dog as D; $d = new D();