【发布时间】:2019-07-24 09:00:56
【问题描述】:
php 中命名空间的新手并试图调用一个虚拟类。下面是代码
include "App/Controllers/Home.php";
// This code works but I commented it out to try it the otherway
//$home = new \App\Controllers\Home();
$namespace = "\App\Controllers\\";
$home = new $namespace . Home();
$home->index();
显示错误
致命错误:未捕获的错误:在 C:\xampp\htdocs\namespace\index.php:16 中找不到类 '\App\Controllers\' 堆栈跟踪:#0 {main} 在 C:\xampp\htdocs 中抛出\namespace\index.php 第 16 行
我相信我没有正确地转义命名空间,你能帮忙吗?
【问题讨论】:
-
您在哪里需要该课程?另外,您为什么将 $namespace 声明为要在下一行使用的 var?
-
我需要通过加载器加载类,我需要稍后将命名空间作为变量或常量添加到加载器......所以尝试一下。
-
为什么不先声明命名空间
namespace \App\Controllers;,然后再声明$home = new Home;?或者您可以一次性完成所有操作(使用单引号意味着您不必转义反斜杠)$class = '\App\Controllers\Home\'; $home = new $class(); -
不是真的关于转义......注意错误消息是怎么说的,“找不到类 '\App\Controllers\'” - 根本没有提到
Home?那是因为Operator Precedence -new是最高的,所以你写的基本上相当于(new $namespace) . (Home()),那当然不是你想要的。 -
我更新了整个东西,如果你能再次看到会很高兴。
标签: php namespaces