Trong bài này, chúng ta sẽ tìm hiểu về namespace trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
1. Namespace trong PHP là gì?
Namespace trong PHP giúp gom nhóm các lớp (class), hằng (constant), hàm (function) cùng thực hiện một nhiệm vụ với nhau. Việc này giúp tổ chức code tốt hơn và tránh nhầm lẫn giữa các lớp, hằng, hàm cùng tên nhưng chức năng khác nhau.
Ví dụ, một chương trình PHP lớn gồm nhiều file. Các file này chứa các lớp (class) thực hiện những chức năng khác nhau. Nhưng chúng có thể có những lớp (class) cùng tên với nhau.
Có trường hợp, chúng ta cần include hoặc require nhiều file để thực hiện một chức năng nào đó. Nếu chúng ta gọi một lớp (class) cùng tên, chương trình sẽ không biết chúng ta gọi lớp nào trong file nào. Cần khai báo namespace cho các lớp để giải quyết trường hợp này.
2. Khai báo một namespace trong PHP
Namespace được khai báo ở dòng đầu tiên sau cú pháp <?php
của file script .php. Sử dụng từ khóa namespace. Ví dụ, chúng ta khai báo namespace Html.
namespace Html;
Lưu ý: Phải khai báo namespace ở dòng đầu tiên cú pháp <?php
của file script .php. Khai báo namespace như bên dưới sẽ bị lỗi.
<?php
echo "Hello World!";
namespace Html;
?>
Hằng (constant), lớp (class), hàm (function) được khai báo trong file Html.php
bên dưới đều thuộc về namespace Html.
<?php
namespace Html;
class Table {
public $title = "";
public $numRows = 0;
public function message() {
echo "<p>Table '{$this->title}' has {$this->numRows} rows.</p>";
}
}
class Row {
public $numCells = 0;
public function message() {
echo "<p>The row has {$this->numCells} cells.</p>";
}
}
?>
3. Sử dụng namespace trong PHP
Để sử dụng các lớp từ một namespace, chúng ta cần chỉ định rõ namespace đó. Ví dụ:
<?php
include "Html.php";
$table = new Html\Table();
$table->title = "My table";
$table->numRows = 5;
$row = new Html\Row();
$row->numCells = 3;
?>
<html>
<body>
<?php $table->message(); ?>
<?php $row->message(); ?>
</body>
</html>
Kết quả
Table 'My table' has 5 rows.
The row has 3 cells.
Chúng ta có thể sử dụng bí danh (alias) để giúp viết ngắn gọn hơn tên namespace.
<?php
include "Html.php";
//alias of Html namespace
use Html as H;
$table = new H\Table();
$table->title = "My table";
$table->numRows = 5;
?>
<html>
<body>
<?php $table->message(); ?>
</body>
</html>
Tham khảo: PHP Namespaces