请问一下对于一个通过use引入了namespace的类,在通过变量动态调用时不带namespace为什么会报错找不到(即代码段1、2为什么会提示“class 'A' not found”)
<?phpnamespace aaa;class A{ public static function hello() { echo "hello, i am " . __CLASS__; } }?><?phpnamespace bbb;use \aaa\A;// 1. 不带namespace调用// 以下代码会报错 “class 'A' not found”$cls = "A"; $cls::hello();// 2. 不带namespace通过call_user_func调用// 以下代码会报错 “class 'A' not found”call_user_func(array('A', 'hello'));// 3. 带namespace调用// 运行成功,正常输出$cls = "\aaa\A"; $cls::hello();// 4. 带namespace通过call_user_func调用// 运行成功,正常输出call_user_func(array('\aaa\A', 'hello'));
在php manual文档的“命名空间”章节中有个例子命名空间 Example #3 导入和动态名称
用上文\aaa\A
的代码测试该例子也是提示未找到类,其中使用的实验环境分别有php5.3、5.4、5.5、5.6、7.0