PHP命名空间(namespace)的动态访问及使用技巧
PHP的命名空间(namespace)是PHP5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。
一.动态访问命名空间的元素
namespaceme\poet; functiontest() { echo'1111'; } $fun='test';//不能这么用,最后$fun()无法动态调用到test():Fatalerror:Calltoundefinedfunctiontest() $fun='\me\poet\test';//正确 //$fun='me\poet\test';//正确 $fun();
也就是说,动态调用必须是限定名称或完全限定名称(概念参考:PHP命名空间的使用基础)
二.魔术常量和操作符
namespaceme\poet; functiontest() { echo'1'; } echo__NAMESPACE__;//魔术常量:命名空间的名称(输出me\poet) //namespace操作符:显式访问当前命名空间或子命名空间中的元素,等价于类中的self操作符 \me\poet\test(); namespace\test(); //上两行代码等价。
三.别名、导入和全局空间(含多个例子)
namespacews\weichen\www; usews\weichen\wwwaspoet;//定义别名poet //usews\weichen\www;//不加as,则取最后的作为别名(www) functiondemo() { echo'1'; } \ws\weichen\www\demo(); poet\demo(); //www\demo();//不加as的情况,则这样调用
以上三行代码效果一样。
按规则(ws\weichen\www)命名的好处:若更换域名,只要把前缀名称改了就可以,不影响后面代码中别名www的使用。
/*导入*/ include'hello.class.php'; use\ws\weichen\www; use\Hello; /*--------------------------------------------------------*/ /*支持多个use语句*/ use\nihao\shijieashello,\ws\weichen\www; /*--------------------------------------------------------*/ /*全局空间:反斜线调用*/ namespaceA\B\C; //这个函数是A\B\C\fopen(); functionfopen() { $f=\fopen('demo.txt');//调用全局fopen函数 return$f; }