我很难尝试自动加载父类
这是我的目录结构
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扩展但现在试图从控制器/核心获取它
答案 0 :(得分:1)
这就是命名空间的解析方式:
class Homepage extends Controller
Controller
已解析为Controller\Controller
,因为它是一个非限定类名(如相对文件路径),并且使用当前命名空间。
class Homepage extends Core\Controller
Core/Controller
已解析为Controller\Core\Controller
,因为它也是一个非限定类名,并且使用了当前命名空间的子命名空间
class Homepage extends \Core\Controller
\Core\Controller
是完全限定的类名,将被解析为Core\Controller
use Core\Controller; class Homepage extends Controller
此处use
语句指定将不合格的Controller
视为Core\Controller
变体3和4将按预期工作。