Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从其他目录自动加载父类_Php_Oop_Autoload - Fatal编程技术网

Php 从其他目录自动加载父类

Php 从其他目录自动加载父类,php,oop,autoload,Php,Oop,Autoload,我很难尝试自动加载父类 这是我的目录结构 controllers --- Homepage.php core --- Controller.php index.php 这是my index.php的内容 function __autoload($class_name) { $file_name = str_replace("\\", DIRECTORY_SEPARATOR, $class_name) . '.php'; include $file_name; } $homep

我很难尝试自动加载父类

这是我的目录结构

controllers
--- Homepage.php
core
--- Controller.php
index.php
这是my 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,我尝试从类主页extends Core\Controller扩展,但现在尝试从controllers/Core获取它,这就是名称空间的解析方式:

  • class主页扩展控制器

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

  • class主页扩展了Core\Controller

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

  • 类主页扩展\Core\Controller

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

  • 使用核心\控制器;类主页扩展控制器

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


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

    如果将
    use\Core\Controller在Homepage.php中的名称空间声明之后?也尝试过了,但它返回了解析错误:解析错误,预期为“标识符(T_字符串)”或
    extenses\Core\Controller
    这是很久以前的事了,但我认为应该通过添加
    use Core\Controller来解决这个问题在controllers/Homepage.php中应该完成这项工作(正如frz3993所评论的)。这个错误看起来是你做错了。再试一次-这应该是解决方案。