试图理解 php 中的命名空间是如何工作的,但被卡住了。
下面是项目的架构。
类:Loader.php(假设加载 Controller /模型/库,但现在是乱码测试代码)
namespace system\core;
class Loader
{
public function index()
{
echo 'loader';
}
public function controller($pathtocontroller)
{
// Echo path to the controller
echo $pathtocontroller;
}
}
index.php
require 'system/core/Loader.php';
require 'system/core/BaseController.php';
require 'app/controller/common/HomeController.php';
use system\core;
use app\controller;
$loader = new \system\core\Loader();
$loader->controller(app\controller\common\HomeController);
这是我得到的错误
Fatal error: Undefined constant 'app\controller\common\HomeController' in C:\xampp\htdocs\psrstd\index.php on line 20. Lin 20 on index is $loader->controller(app\controller\common\HomeController);
预期结果:app/controller/common/HomeController
如果您想知道 HomeController 中有什么(又是乱码测试代码)
namespace app\controller\common;
use system\core\BaseController;
class HomeController extends BaseController
{
public function index()
{
echo 'home';
}
}
最佳答案
您正在将一个常量类型传递给您的 Controller 方法,
你的目标是传递一个对象 [dependency injection
] 所以你需要像这样实例化你的参数:
$loader->controller(new \app\controller\common\HomeController);
否则您可以将此参数作为字符串发送,例如:
$loader->controller("\\app\\controller\\common\\HomeController");
并在您的方法中实例化该对象 [ 作为工厂方法
]
public function controller($pathtocontroller)
{
// new $pathtocontroller and so on
}
进一步阅读:
关于php - 了解 php 命名空间以及 fatal error : undefined constant 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247869/