PHP 命名空间
PHP 命名空间
命名空间解决了两个不同的问题
- 它们可以通过分组执行同一任务的类来更好地组织代码
- 它们允许使用相同的名称来命名多个类
例如,您可能有一组描述 HTML 表的类,例如 Table、Row 和 Cell,同时还有另一组描述家具的类,例如 Table、Chair 和 Bed。可以使用命名空间将这些类组织到两个不同的组中,同时防止两个同名的 Table 类混淆。
声明一个命名空间
命名空间在文件开头使用 `namespace` 关键字声明
语法
声明一个名为 Html 的命名空间
<?php
namespace Html;
?>
注意: `namespace` 声明必须是 PHP 文件中的第一条语句。以下代码将是无效的
<?php
echo "Hello World!";
namespace Html;
...
?>
在此文件中声明的常量、类和函数将属于 Html 命名空间
示例
在 Html 命名空间中创建一个 Table 类
<?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>
自己动手试一试 »
为了进一步组织,可以拥有嵌套的命名空间
语法
在 Code 命名空间内声明一个名为 Html 的命名空间
<?php
namespace Code\Html;
?>
使用命名空间
任何跟在 `namespace` 声明之后的代码都将在该命名空间内运行,因此可以直接实例化属于该命名空间的类,而无需任何限定符。要访问命名空间之外的类,类需要附加命名空间。
当同时使用同一命名空间中的许多类时,使用 `namespace` 关键字会更方便
示例
在不需要 Html\ 限定符的情况下使用 Html 命名空间中的类
<?php
namespace Html;
$table = new Table();
$row = new Row();
?>
自己动手试一试 »
命名空间别名
为了方便书写,为命名空间或类起一个别名会很有用。这可以通过 `use` 关键字来实现