php:命名空间

php.net
(PHP 5 >= 5.3.0, PHP 7)
参见php自动加载,会对命名空间有重复好之认识

定义子命名空间

<?php
namespace MyProject\Sub\Level;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>

下命名空间

类名的老三栽引用形式:

  • 非限定名称(名称被莫含有命名空间分隔符的标识符),或不分包前缀的类名称。例如
    $a=new foo(); 或 foo::staticmethod();。倘使手上命名空间是
    currentnamespace,foo 将被解析为 currentnamespace\ca88官网,foo。假使用 foo
    的代码是大局的,不带有在外命名空间被之代码,则 foo
    会被解析为foo。*
    *警告**:假若命名空间中之函数或常量未定义,则该非限定的函数名称或者常量名称会为解析为大局函数名称或者常量名称。
  • 界定名称(名称中寓命名空间分隔符的标识符),或含前缀的名目,例如
    $a = new subnamespace\foo(); 或
    subnamespace\foo::staticmethod();。假诺手上之命名空间是
    currentnamespace,则 foo 会被分析为
    currentnamespace\subnamespace\foo。要是接纳 foo
    的代码是大局的,不分包在其它命名空间被的代码,foo
    会被解析为subnamespace\foo。
  • 一心限定名称(名称中包含命名空间分隔符,并坐命名空间分隔符开端之标识符),或带有了大局前缀操作符的名目。访问任意全局类、函数或常量,都足以以了限定名称,例如
    \strlen() 或 \Exception 。

tips:

$a = '\namespacename\classname';
$obj = new $a; 
$a = 'namespacename\classname';
$obj = new $a;
$b = 'namespacename\funcname';
$b(); // prints namespacename\funcname
$b = '\namespacename\funcname';
$b(); // also prints namespacename\funcname

运用有关常量

常量__NAMESPACE__的价是富含当前命名空间名称的字符串。在全局的,不包在其它命名空间被的代码,它富含一个缺损的字符串。

概念命名空间

则任意合法的PHP代码都好分包在命名空间中,但光发以下体系的代码受命名空间的熏陶,它们是:类(包括抽象类和traits)、接口、函数和常量。
就算一个文书中隐含命名空间,它必须以外具有代码往日扬言命名空间,除了一个外:declare关键字。所有非
PHP 代码包括空白符都未可知起于命名空间的宣示前。

<html>
<?php
namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句
?>

及一个命名空间能够定义在多单文本中,即许将同一个命名空间的情分存放于不同之公文被。

当与一个文书被定义两个命名空间

流淌:在实际的编程实践着,非凡不提倡在跟一个文件中定义多单命名空间!

<?php
namespace MyProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace AnotherProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
?>

动用命名空间:别名/导入

<?php
namespace foo;
use My\Full\Classname as Another;

// 下面的例子与 use My\Full\NSname as NSname 相同
use My\Full\NSname;

// 导入一个全局类
use ArrayObject;

// importing a function (PHP 5.6+)
use function My\Full\functionName;

// aliasing a function (PHP 5.6+)
use function My\Full\functionName as func;

// importing a constant (PHP 5.6+)
use const My\Full\CONSTANT;

$obj = new namespace\Another; // 实例化 foo\Another 对象
$obj = new Another; // 实例化 My\Full\Classname 对象
NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
// 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
func(); // calls function My\Full\functionName
echo CONSTANT; // echoes the value of My\Full\CONSTANT
?>

仿佛名称总是解析及当下定名空间被的名。由此于看系统之中依旧未包含在命名空间受到的切近名称时,必须动了限定名称。

相关文章