PHP 命名空间

创建于 2024-12-03 / 33
字体: [默认] [大] [更大]

PHP 命名空间

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

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

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


声明命名空间

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

语法

Declare a namespace called Html:

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 的命名空间:

namespace CodeHtml;

使用命名空间

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

实例

使用 Html 命名空间中的类:

$table = new HtmlTable()
$row = new HtmlRow(); 亲自试一试 »

当同时使用来自同一个命名空间的多个类时,使用 namespace 关键字会更容易:

实例

使用 Html 命名空间中的类而不需要 Htmlqualifier:

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

命名空间别名

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

实例

给命名空间一个别名:

use Html as H;
$table = new HTable(); 亲自试一试 »

实例

给一个类一个别名:

use HtmlTable as T;
$table = new T(); 亲自试一试 »

0 人点赞过