PHP 的变量类如何使用 namespace ?

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

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

这样是可以的

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

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

这样是不可以

怎么办

补充

我是用了 composer 的自加载,然后在头部定义了 
use xxx\v2ex; 

然后在代码中如果使用 

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

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

如果我直接写 

new v2ex\text(); 

可以执行。
阅读 4.1k
6 个回答

可以的

$c = \segmentfault\test::class;
$c = '\segmentfault\test';
new $c();

new \segmentfault\test()

namespace segmentfault后面加分号

segmentfault\test 这句要双斜杠,否则斜杠是对test的第一个字母的转义

namespace segmentfault;//末尾加分号

$class = 'segmentfault\\test';

经测试

当类名为一个变量时就不会读取use引用的路径

要在类名变量中写全命名空间的路径

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

$t->run();

$c = '\\segmentfault\\test';

new segmentfaulttest()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题