关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。
namespace操作符,命名空间中的代码
<?php namespace MyProject; use blahblah as mine; // see "Using namespaces: importing/aliasing" blahmine(); // calls function blahblahmine() namespaceblahmine(); // calls function MyProjectblahmine() namespacefunc(); // calls function MyProjectfunc() namespacesubfunc(); // calls function MyProjectsubfunc() namespacecname::method(); // calls static method "method" of class MyProjectcname $a = new namespacesubcname(); // instantiates object of class MyProjectsubcname $b = namespaceCONSTANT; // assigns value of constant MyProjectCONSTANT to $b ?>
namespace操作符, 全局代码
<?php namespacefunc(); // calls function func() namespacesubfunc(); // calls function subfunc() namespacecname::method(); // calls static method "method" of class cname $a = new namespacesubcname(); // instantiates object of class subcname $b = namespaceCONSTANT; // assigns value of constant CONSTANT to $b ?>
使用命名空间:别名/导入
PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。
在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的三种导入方式的例子:
1、使用use操作符导入/使用别名
<?php namespace foo; use MyFullClassname as Another; // 下面的例子与 use MyFullNSname as NSname 相同 use MyFullNSname; // 导入一个全局类 use ArrayObject; $obj = new namespaceAnother; // 实例化 fooAnother 对象 $obj = new Another; // 实例化 MyFullClassname 对象 NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use ArrayObject" ,则实例化一个 fooArrayObject 对象 ?>
2、 一行中包含多个use语句
<?php use MyFullClassname as Another, MyFullNSname; $obj = new Another; // 实例化 MyFullClassname 对象 NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc ?>
导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。
3、导入和动态名称
<?php use MyFullClassname as Another, MyFullNSname; $obj = new Another; // 实例化一个 MyFullClassname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。
4、导入和完全限定名称
<?php use MyFullClassname as Another, MyFullNSname; $obj = new Another; // 实例化 MyFullClassname 类 $obj = new Another; // 实例化 Another 类 $obj = new Anotherthing; // 实例化 MyFullClassnamething 类 $obj = new Anotherthing; // 实例化 Anotherthing 类 ?>







