使用命名空间

和使用文件类似,命名空间的使用可以通过相对路径形式和绝对路径形式。

命名空间的基本用法

PHP 命名空间中的元素使用和操作系统中的文件路径类似,类名可以通过三种方式引用:

  1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo();foo::staticmethod();。如果当前命名空间是 currentnamespacefoo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo
  2. 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo
  3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo
<?php namespace Foo\Bar\subnamespace; const FOO = 1; function foo() { echo 'funfoo1' . "\n"; ; } class foo { public static function staticmethod() { echo 'classfoo1' . "\n"; } } namespace Foo\Bar; const FOO = 2; function foo() { echo 'foo2' . "\n"; } class foo { public static function staticmethod() { echo 'class2' . "\n"; } } /* 非限定名称 */ foo(); foo::staticmethod(); echo FOO; /* 限定名称 */ subnamespace\foo(); subnamespace\foo::staticmethod(); echo subnamespace\FOO; /* 完全限定名称 */ \Foo\Bar\foo(); \Foo\Bar\foo::staticmethod(); echo \Foo\Bar\FOO;

别名及导入

在PHP中,导入和使用别名都是用过use实现的,例如:

<?php
namespace foo;

use My\Full\Classname as Another;

use My\Full\NSname;

use My\Full\Classname as Another, My\Full\NSname;

全局空间

如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

<?php
namespace A\B\C;

/* 这个函数是 A\B\C\fopen */
function fopen() { 
     /* ... */
     $f = \fopen(...); // 调用全局的fopen函数
     return $f;
}

results matching ""

    No results matching ""