我正在尝试创建一个可以在需要时自动加载课程的系统。
这是我的文件夹结构
| index.php
| app
| - app.php
| - core
| -- core.php
| -- helpers
| --- htmlhelper.php
其中index.php
是引导程序文件,core.php
是我要扩展的核心文件,而helpers文件夹中的所有类都包含我喜欢自动加载的类。
由于我自己的自动加载对我来说是一个相当新的事情,我对如何做到这一点非常困惑。我可以自动加载核心文件,但我似乎无法弄清楚如何自动加载帮助程序类。
这是我到目前为止的代码:
的index.php
require_once('app/app.php');
$app = new App();
$app->display();
app.php
use App\Core\Core as Core;
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
class App{
function __construct(){
//Core::addStyle('/file/css/foo1.css');
Core::foo();
}
public function display(){
Core::getStyles();
}
}
core.php中
namespace App\Core;
// dependancies
use App\Core\Helpers\HtmlHelper as Helper;
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
class Core
{
function foo(){
var_dump('bar');
}
}
htmlhelper.php
namespace App\Core\Helpers;
class HtmlHelper extends Core{
protected $styles;
protected $scripts;
public static function addStyle($data){
if(is_array($data)){
$this->styles = array_merge($this->styles, $data);
}else{
$this->styles[] = $data;
}
}
public static function getStyles(){
var_dump($this->styles);
}
}
使用我现在拥有的代码,core
类可以自动加载,我可以调用foo()
方法,但htmlhelper
类不会被加载。我知道这是因为PHP抛出了getStyles()
未定义的错误。
我这样做是为了实现应用程序核心功能的一个出口点,但是将代码分成不同的文件。
理想情况下,我想自动加载帮助程序文件夹中的所有类,而不必放置use ..
个定义块,如果可行的话。
我认为缺乏关于php命名空间的知识是我目前最大的缺陷。
我似乎无法找到任何可以完全解释我如何用傻瓜语言做这些事情的好资料。