PHP命名空间和自动加载扩展类

时间:2015-04-03 16:43:04

标签: php namespaces autoload

我正在尝试创建一个可以在需要时自动加载课程的系统。

这是我的文件夹结构

| 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命名空间的知识是我目前最大的缺陷。

我似乎无法找到任何可以完全解释我如何用傻瓜语言做这些事情的好资料。

0 个答案:

没有答案