php - 了解 php 命名空间以及 fatal error : undefined constant 的原因

标签 php namespaces

试图理解 php 中的命名空间是如何工作的,但被卡住了。

下面是项目的架构。

enter image description here

类: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

}

进一步阅读:

What is Dependency Injection?

Factory design pattern

关于php - 了解 php 命名空间以及 fatal error : undefined constant 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247869/

相关文章:

php - 如何在 Swift 的 post 请求中找到另一种使用 "&"的方法

php - 可以在外部文件中执行AJAX执行PHP吗?

php - 在 xpath 查询中使用 not

javascript - 有没有办法使用 HTML5、Javascript 或 PHP 设置视频时长限制?有点像 Snapchat 和 vine

php - 带有扩展或接口(interface)的命名空间会导致没有自动加载器的 fatal error

c++ - 使用命名空间的全局变量

javascript - 未定义索引 : PHP variables passing by AJAX

c++ - 命名空间外部变量的 undefined reference /多重定义,C++ 结构化问题

vb.net - 在 VB.NET 中设置 WinForms UserControl 的命名空间

XSLT for-each 命名空间