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;
}