为什么在使用命名空间中我会犯错?
PHP命名空间解析规则(告别PHP namespace给你带来的纠结)
写完这个之后,忽然想起,为什么我在使用php的namespace的时候会经常犯错呢?
先看如下的代码
<?php
namespace myns1
{
class MyClass1
{
public static function myfunc()
{
echo 'myns1:MyClass1:myfunc()<br/>';
}
}
}
namespace myns1\myns11
{
class MyClass2
{
public static function myfunc()
{
echo 'myns1\myns11:MyClass2:myfunc()<br/>';
}
}
}
namespace myns3
{
use myns1;
use myns1\myns11;
class MyClass3
{
public static function myfunc()
{
echo 'myns3:MyClass3:myfunc()<br>';
MyClass1::myfunc();
myns11\MyClass2::myfunc();
MyClass2::myfunc();
}
}
MyClass3::myfunc();
}
看出我代码错在什么地方了么?我一直以为,使用use myns1语句之后,在MyClass3中,如果查找不到MyClass1,就会自动在命名空间myns1中寻找,同理,我以为加上use myns1之后也许不用use myns1\myns11,另外假如use myns1\myns11加入之后,只要直接MyClass2::myfunc()就可以了。
不知道自己为什么会潜意识那样去理解,实际上,正确的写法应该是
myns1\MyClass1::myfunc();
myns11\MyClass2::myfunc();
其他调用方法都是错误的。
浙公网安备 33010602011771号