PHP 的变量类如何使用 namespace ?

2017-07-05 16:04:23 +08:00
 hoythan
class test{
	public function run()
    {
    	echo 'success';
    }
}

$class = 'test';

new $class();

这样是可以

namespace v2ex
class test{
	public function run()
    {
    	echo 'success';
    }
}

$class = 'v2ex\test';
new $class();

这样是不可以

怎么办

2586 次点击
所在节点    PHP
11 条回复
holyghost
2017-07-05 16:25:24 +08:00
奇怪,我这是可以的

gouchaoer
2017-07-05 16:27:14 +08:00
不要去用没有定义的行为
liuhaotian
2017-07-05 16:28:32 +08:00
namespace V2EX 后面漏了一个分号
wkan
2017-07-05 16:33:05 +08:00
可能是 namespace V2EX 后面少个分号 :doge:
hoythan
2017-07-05 16:53:03 +08:00
@liuhaotian
@wkan
分号在的,我是用了 composer 的自加载,然后在头部定义了
use xxx\v2ex;

然后在代码中如果使用

$class = 'v2ex\\test';
new $class();

就会报错。Uncaught Error: Class,前面加 \\也试过不可以

如果我直接写

new v2ex\text();

可以执行。
johnlui
2017-07-05 17:00:49 +08:00
看完这个以后就不会再问了:《 PHP 命名空间 解惑》 https://lvwenhan.com/php/401.html
hoythan
2017-07-05 17:02:35 +08:00
@johnlui 如果是说 \ 的话 确实不是这个问题,加不加都一样报错
hoythan
2017-07-05 17:03:16 +08:00
@johnlui 或者你的意思是 use xxx\v2ex; 不写
直接改成
new \xxx\v2ex\test();
?
hoythan
2017-07-05 17:04:17 +08:00
@johnlui 果然,不用 use 直接写才行。
hoythan
2017-07-05 17:09:32 +08:00
@johnlui 看不懂原理
qiyon
2017-07-05 17:38:04 +08:00
可以试试:
```
$class_name = \v2ex\test::class;
$obj = new $class_name();
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX