从其他目录自动加载父类

时间:2015-07-25 08:10:27

标签: php oop autoload

我很难尝试自动加载父类

这是我的目录结构

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';
    }

}

这是我的核心/ Controller.php

namespace Core;

class Controller
{

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

}

当我运行index.php时,自动加载器正确加载Hompege但是在控制器目录中寻找Controller.php我尝试从类扩展Core \ Controller扩展但现在试图从控制器/核心获取它

1 个答案:

答案 0 :(得分:1)

这就是命名空间的解析方式:

  1. class Homepage extends Controller

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

  2. class Homepage extends Core\Controller

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

  3. class Homepage extends \Core\Controller

    \Core\Controller是完全限定的类名,将被解析为Core\Controller

  4. use Core\Controller; class Homepage extends Controller

    此处use语句指定将不合格的Controller视为Core\Controller

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