从不同的目录自动加载父 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
获取它
命名空间是这样解析的:
class Homepage extends Controller
Controller
解析为 Controller\Controller
因为它是非限定 class 名称(如相对文件路径),并且使用当前命名空间。
class Homepage extends Core\Controller
Core/Controller
解析为 Controller\Core\Controller
因为它也是一个非限定的 class 名称并且使用了当前命名空间的子命名空间
class Homepage extends \Core\Controller
\Core\Controller
是完全限定的 class 名称,将解析为 Core\Controller
use Core\Controller; class Homepage extends Controller
这里的use
语句指定一个非限定的Controller
被视为Core\Controller
变体 3 和 4 将按预期工作。
我很难尝试自动加载父 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
获取它命名空间是这样解析的:
class Homepage extends Controller
Controller
解析为Controller\Controller
因为它是非限定 class 名称(如相对文件路径),并且使用当前命名空间。class Homepage extends Core\Controller
Core/Controller
解析为Controller\Core\Controller
因为它也是一个非限定的 class 名称并且使用了当前命名空间的子命名空间class Homepage extends \Core\Controller
\Core\Controller
是完全限定的 class 名称,将解析为Core\Controller
use Core\Controller; class Homepage extends Controller
这里的
use
语句指定一个非限定的Controller
被视为Core\Controller
变体 3 和 4 将按预期工作。