4

すべてのクラスを必要とするインタープリターのディレクトリにすべてのクラスを含めることに関するこの質問では、問題を処理するより良い方法は、インタープリターのこの反復に必要なコマンド ファイルのみを条件付きで含めることであると提案されましたたとえば、これの代わりに:

require_once('CommandA.php');
require_once('CommandB.php');
require_once('CommandC.php');

class Interpreter {

    public function interpret($action) {
        switch($action) {
            case 'A':
                $c = new A();
                $c->execute();
                break;
        }
    }
}

次のようにします。

class Interpreter {

    public function interpret($action) {
        switch($action) {
            case 'A':
                require_once('CommandA.php');
                $c = new A();
                $c->execute();
                break;
        }
    }
}

ファイルの先頭にあるすべてのファイルを含む C スタイルとは対照的に、必要なコマンドのみを動的かつ条件付きでロードする 2 番目の選択肢を使用することの利点と欠点は何ですか?

前回の質問への回答では、条件付き読み込みの利点として、速度、フットプリント、書きやすさが挙げられていました。これが対処されている他の質問では、C スタイルの読み込みがより読みやすく、保守しやすいことが示唆されているのを見てきました。誰でもこれらについて詳しく説明できますか?他の利点または欠点はありますか?

4

1 に答える 1

2

条件付きロードの主な利点は、そのクラスをロードするたびに php ファイルのツリー全体が含まれないことです。コード キャッシュを使用する場合 (そうすべきです)、vm が /(include|require)(once)?/ に遭遇するたびにファイルの更新がチェックされるため、不要な php ファイルを含めるとコード遅くなります。

この特定の方法の欠点は、保守が難しく、間違いを犯しやすいことです。1 つのことを 2 回書くのはコードの匂いです。My_Class を書くということは、このクラスが必要であることを意味し、 include "My_Class.php" と書くこともこれを意味します。これは正しくないです。

オートローディングの使用をお勧めします: http://php.net/manual/en/language.oop5.autoload.php

于 2010-09-21T12:23:38.263 に答える