试图理解php中的命名空间是如何工作的并且卡住了。
以下是该项目的架构。
类: Loader.php (假设加载控制器/模型/库,但现在是乱码测试代码)
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);
这是我得到的错误
致命错误:未定义常量' app \ controller \ common \ HomeController' 在第20行的C:\ xampp \ htdocs \ psrstd \ index.php中。索引上的Lin 20是$ 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';
}
}
答案 0 :(得分:1)
您将常量类型传递给控制器方法,
你的目标是传递一个对象[dependency injection
],所以你需要实例化你的论点,如:
$loader->controller(new \app\controller\common\HomeController);
否则您可以将此参数作为字符串发送,如:
$loader->controller("\\app\\controller\\common\\HomeController");
并在方法[as a factory method
]
public function controller($pathtocontroller)
{
// new $pathtocontroller and so on
}
进一步阅读: