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所评论的)。这个错误看起来是你做错了。再试一次-这应该是解决方案。