首页 > 编程笔记 > PHP笔记 阅读:11

PHP namespace命名空间的用法(附带实例)

PHP 代码的物理存放形式是以 .php 为扩展名的文本文件,而命名空间则是开发资源的一种逻辑组织形式,可以有效区分不同开发者提供的资源。

例如,A 资源中定义了 tC1 类,B 资源中也定义了 tC1 类,在一个代码文件中同时使用 A 资源和 B 资源时,就需要区分不同的 tC1 类,此时,就可以使用命名空间分别组织 A 资源和 B 资源。

接下来创建 /demo/A.php 文件并修改内容如下:
<?php
namespace A;

class tC1
{
    public function m1()
    {
        echo __NAMESPACE__,"<br>";
        echo __METHOD__,"<br>";
    }
}
?>

创建 /demo/B.php 文件并修改内容如下:
<?php
namespace B;

class tC1
{
    public function m1()
    {
        echo __NAMESPACE__,"<br>";
        echo __METHOD__,"<br>";
    }
}
?>

A.php 和 B.php 文件中的第一行代码使用 namespace 关键字分别定义了资源所属的命名空间。下面的代码演示了如何在一个文件中使用这两个命名空间中的 tC1 类。
<?php
require_once $_SERVER["DOCUMENT_ROOT"]."/demo/A.php";
require_once $_SERVER["DOCUMENT_ROOT"]."/demo/B.php";

use A\tC1 as tC1A;
use B\tC1 as tC1B;

$objA = new tC1A();
$objA->m1();
echo "<br>";
$objB = new tC1B();
$objB->m1();

?>
代码中,首先使用 require_once 语句引用了 A.php 和 B.php 文件。然后,使用 use 语句引用 A 命名空间中的 tC1 类,并使用 as 关键字定义别名为 tC1A,引用 B 命名空间中的 tC1 类并定义别名为 tC1B。最后,分别创建 tC1A 和 tC1B 类的对象,并调用 m1() 方法,代码执行结果见下图。


定义命名空间时,还可以使用多级管理。如下面的代码,在 /demo/C.php 文件中定义了一个多级命名空间,其中定义了 tC1 类。
<?php
namespace A\B\C;

class tC1
{
    public function m1()
    {
        echo __NAMESPACE__,"<br>";
        echo __METHOD__,"<br>";
    }
}
?>
使用多级命名空间下的类时,需要指定完整的命名空间路径,如下面的代码:
use A\B\C\tC1;
代码执行结果见下图。


使用 use 语句指定命名空间和类的完整路径后,代码中可以直接使用类名,如前面的示例。如果没有使用 use 语句引用类,就需要使用类的完整路径,如下面的代码:
<?php
require_once $_SERVER["DOCUMENT_ROOT"]."/demo/C.php";

$c1 = new A\B\C\tC1();
$c1->m1();
?>
命名空间的层次表示了引用资源的路径,主要有两种形式:
实际开发中,如果每个资源文件都需要单独引用,其效率是非常低的。不过,PHP 提供了自动引用代码文件的机制。

相关文章