Php/php namespaces

来自菜鸟教程
跳转至:导航、​搜索

PHP命名空间

PHP命名空间

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

  1. 通过将可一起执行任务的类分组,它们可以实现更好的组织
  2. 它们允许同一名称用于多个类别

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

声明命名空间

命名空间在文件的开头使用 namespace 关键词:

句法

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

namespace Html;

注意: A 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 Code\Html;

使用命名空间

后面的任何代码 namespace 声明在名称空间内操作,因此可以实例化属于名称空间的类而无需任何限定符。要从名称空间外部访问类,该类需要具有附加的名称空间。

使用Html命名空间中的类:

    $table = new Html\Table()
$row = new Html\Row();

当同一时间使用同一名称空间中的多个类时,使用 namespace 关键词:

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

    namespace Html;
$table = new Table();
$row = new Row();

命名空间别名

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

给命名空间起一个别名:

use Html as H;
$table = new H\Table();

给课程起一个别名:

use Html\Table as 
    T;
$table = new T();