为什么在使用命名空间中我会犯错?
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();
其他调用方法都是错误的。