在PHP中动态构建/加载类库

时间:2009-07-30 23:04:56

标签: php class project-structure

我对OO编程很新......

我正在构建最终将成为我的网站中使用的大型类库。显然,在每个页面上加载整个库是浪费时间和精力......

所以我想要做的是在每个页面上需要一个“config”php类文件,并且能够根据需要“调用”或“加载”其他类 - 从而根据我的需要扩展我的课程。 / p>

据我所知,由于范围问题,我不能在config类中使用函数来简单地包含()其他文件。

我有什么选择?开发人员通常如何处理这个问题,什么是最稳定的?

2 个答案:

答案 0 :(得分:3)

您可以使用__autoload()或创建一个对象工厂,它将在您需要时加载所需的文件。

顺便说一句,如果您的库文件存在范围问题,则应该重构您的布局。大多数库都是可以在任何范围内实例化的类集。

以下是一个非常基本的对象工厂示例。

class ObjectFactory {

    protected $LibraryPath;

    function __construct($LibraryPath) {
        $this->LibraryPath = $LibraryPath;
    }

    public function NewObject($Name, $Parameters = array()) {
        if (!class_exists($Name) && !$this->LoadClass($Name))
            die('Library File `'.$this->LibraryPath.'/'.$Name.'.Class.php` not found.');
        return new $Name($this, $Parameters);
    }

    public function LoadClass($Name) {
        $File = $this->LibraryPath.'/'.$Name.'.Class.php'; // Make your own structure.
        if (file_exists($File))
                return include($File);
        else    return false;
    }
}

// All of your library files should have access to the factory
class LibraryFile {

    protected $Factory;

    function __construct(&$Factory, $Parameters) {
        $this->Factory = $Factory;
    }
}

答案 1 :(得分:2)

如果您使用的是第三方图书馆的课程,则听起来像autoloadspl_autoload_register