1

私はOOプログラミングにかなり慣れていません...

私は、最終的に私のサイト全体で使用されるクラスの大規模なライブラリになるものを構築しています。明らかに、すべてのページにライブラリ全体をロードすることは、時間とエネルギーの無駄です...

したがって、私がやりたいことは、各ページに 1 つの "config" php クラス ファイルを必要とし、必要に応じて他のクラスを "呼び出す" または "ロード" できるようにすることです。つまり、必要に応じてクラスを拡張します。

私の知る限り、スコープの問題により、構成クラスの関数を使用して他のファイルを単純に include() することはできません。

私のオプションは何ですか?開発者は通常、この問題をどのように処理しますか?また、最も安定しているのはどれですか?

4

2 に答える 2

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;
    }
}
于 2009-07-30T23:10:15.960 に答える
2

サードパーティのライブラリのクラスを使用している場合は、autoloadspl_autoload_registerが必要なようです。

于 2009-07-30T23:06:48.480 に答える