为什么在使用命名空间中我会犯错?

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();

其他调用方法都是错误的。 

posted on 2010-11-09 23:31  陆西星  阅读(207)  评论(0编辑  收藏  举报

导航