目录

PHP 命名空间


PHP 命名空间

命名空间是解决两个不同问题的限定符:

  1. 它们通过对共同执行任务的类进行分组来实现更好的组织
  2. 它们允许同一个名称用于多个类

例如,您可能有一组描述 HTML 表格的类,例如 Table、Row 和 Cell,同时还有另一组描述家具的类,例如 Table、Chair 和 Bed。命名空间可用于将类组织为两个不同的组,同时还可以防止两个类 Table 和 Table 混淆。


声明一个命名空间

命名空间是在文件的开头声明的namespace关键字:

语法

声明一个名为 Html 的命名空间:

<?php
namespace Html;
?>

笔记:Anamespace声明必须是 PHP 文件中的第一部分。以下代码将无效:

<?php
echo "Hello World!";
namespace 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;
?>


使用命名空间

任何跟随 a 的代码namespace声明是在命名空间内操作的,因此属于该命名空间的类可以在没有任何限定符的情况下实例化。要从命名空间外部访问类,该类需要附加命名空间。

示例

使用 Html 命名空间中的类:

<?php
$table = new Html\Table();
$row = new Html\Row();
?>
亲自试一试 »

当同时使用来自同一命名空间的许多类时,使用namespace关键字:

示例

使用 Html 命名空间中的类,无需 Html\qualifier:

<?php
namespace Html;
$table = new Table();
$row = new Row();
?>
亲自试一试 »

命名空间别名

为命名空间或类提供别名以使其更易于编写可能很有用。这是通过use关键字:

示例

给命名空间一个别名:

<?php
use Html as H;
$table = new H\Table();
?>
亲自试一试 »

示例

给一个类一个别名:

<?php
use Html\Table as T;
$table = new T();
?>
亲自试一试 »