如何转义名称空间字符串

时间:2019-07-24 09:00:56

标签: php namespaces

php命名空间的新增功能,并尝试调用虚拟类。这是下面的代码

$eloquentModel->getOriginal();

显示错误

  

致命错误:未捕获错误:在C:\ xampp \ htdocs \ namespace \ index.php:16中找不到类'\ App \ Controllers \':堆栈跟踪:#0 {main}抛出在C:\ xampp \ htdocs中\ namespace \ index.php在第16行

我相信我没有逃避命名空间的权利,您能帮忙吗?

2 个答案:

答案 0 :(得分:1)

如misorude建议您可以尝试:

$namespace = "\\App\Controllers\\";
$classname = $namespace . 'Home';
$home = new  $classname();
$home->index();

答案 1 :(得分:0)

您应该更喜欢对名称空间使用单引号-使用双引号可能会产生一些令人惊讶的效果,因为某些序列在双引号中包含了special meaning。使用单引号时,您只需要关心尾随\,因为\'将作为转义的'起作用,并且不会被解释为字符串的结尾:

$namespace = 'App\Controllers\\';

但这是不寻常的情况,通常您使用的是FQN,因此不会出现此类问题:

$className = 'App\Controllers\Home';
$home = new $className();

或者仅使用::class-更加有趣的是IDE和SCA:

$className = \App\Controllers\Home::class;
$home = new $className();