从不同的目录自动加载父 class

Autoload parent class from a different directory

我很难尝试自动加载父 classes

这是我的目录结构

controllers
--- Homepage.php
core
--- Controller.php
index.php

这是我index.php

的内容
function __autoload($class_name)
{
    $file_name = str_replace("\", DIRECTORY_SEPARATOR, $class_name) . '.php';
    include $file_name;
}

$homepage = new \Controllers\Homepage();
$homepage->index();

这是我的 controllers/Homepage.php 文件的内容

namespace Controllers;

class Homepage extends Controller
{

    public function index()
    {
        echo 'Homepage::index';
    }

}

这是我的 core/Controller.php

namespace Core;

class Controller
{

    protected function something()
    {
        echo 'blablabla';
    }

}

当我 运行 index.php 自动加载器正确加载 Hompege 但正在控制器目录中寻找 Controller.php 我尝试从 class 扩展主页扩展 Core\Controller 但现在正试图从 controllers/core

获取它

命名空间是这样解析的:

  1. class Homepage extends Controller

    Controller 解析为 Controller\Controller 因为它是非限定 class 名称(如相对文件路径),并且使用当前命名空间。

  2. class Homepage extends Core\Controller

    Core/Controller 解析为 Controller\Core\Controller 因为它也是一个非限定的 class 名称并且使用了当前命名空间的子命名空间

  3. class Homepage extends \Core\Controller

    \Core\Controller 是完全限定的 class 名称,将解析为 Core\Controller

  4. use Core\Controller; class Homepage extends Controller

    这里的use语句指定一个非限定的Controller被视为Core\Controller

变体 3 和 4 将按预期工作。