Không gian tên PHP
Không gian tên PHP
Không gian tên là vòng loại giúp giải quyết hai vấn đề khác nhau:
- Chúng cho phép tổ chức tốt hơn bằng cách nhóm các lớp làm việc cùng nhau để thực hiện một nhiệm vụ
- Chúng cho phép sử dụng cùng một tên cho nhiều lớp
Ví dụ: bạn có thể có một tập hợp các lớp mô tả một bảng HTML, chẳng hạn như Bảng, Hàng và Ô, đồng thời có một tập hợp các lớp khác để mô tả đồ nội thất, chẳng hạn như Bàn, Ghế và Giường. Không gian tên có thể được sử dụng để tổ chức các lớp thành hai nhóm khác nhau đồng thời ngăn chặn việc trộn lẫn hai lớp Table và Table.
Khai báo một không gian tên
Không gian tên được khai báo ở đầu tệp bằng từ khóa namespace
:
Cú pháp
Khai báo một namespace tên là Html:
<?php
namespace Html;
?>
Lưu ý: Khai báo namespace
phải là phần đầu tiên trong tệp PHP. Mã sau đây sẽ không hợp lệ:
<?php
echo "Hello World!";
namespace Html;
...
?>
Các hằng, lớp và hàm được khai báo trong file này sẽ thuộc namespace Html :
Ví dụ
Tạo một lớp Bảng trong không gian tên Html:
<?php
namespace Html;
class Table {
public $title = "";
public
$numRows = 0;
public function message() {
echo "<p>Table
'{$this->title}' has {$this->numRows} rows.</p>";
}
}
$table = new
Table();
$table->title = "My table";
$table->numRows = 5;
?>
<!DOCTYPE html>
<html>
<body>
<?php
$table->message();
?>
</body>
</html>
Hãy tự mình thử »Để tổ chức sâu hơn, có thể có các không gian tên lồng nhau:
Cú pháp
Khai báo một không gian tên có tên Html bên trong một không gian tên có tên là Code:
<?php
namespace Code\Html;
?>
Sử dụng không gian tên
Bất kỳ mã nào theo sau khai báo namespace
đều hoạt động bên trong không gian tên, vì vậy các lớp thuộc về không gian tên có thể được khởi tạo mà không cần bất kỳ bộ hạn định nào. Để truy cập các lớp từ bên ngoài một không gian tên, lớp đó cần phải có không gian tên gắn liền với nó.
Ví dụ
Sử dụng các lớp từ không gian tên Html:
<?php
$table = new Html\Table();
$row = new Html\Row();
?>
Hãy tự mình thử » Khi nhiều lớp từ cùng một không gian tên đang được sử dụng cùng lúc, việc sử dụng từ khóa namespace
sẽ dễ dàng hơn:
Ví dụ
Sử dụng các lớp từ không gian tên Html mà không cần bộ định tính Html\:
<?php
namespace Html;
$table = new Table();
$row = new Row();
?>
Hãy tự mình thử »Bí danh không gian tên
Có thể hữu ích nếu đặt bí danh cho một không gian tên hoặc lớp để dễ viết hơn. Việc này được thực hiện bằng từ khóa use
:
Ví dụ
Đặt bí danh cho không gian tên:
<?php
use Html as H;
$table = new H\Table();
?>
Hãy tự mình thử »