0

という名前の変数を含む「config.php」という名前のファイルがあります$unit_names。クラスには、IDでユニット名を返す次のメソッドがあります。このメソッドをテーブルのすべての行に使用していますが、問題はconfig.phpメソッドの最初の呼び出しにのみ含まれています。次の呼び出しで通知が発生します。undefined variable $unit_names...

交換include_onceするincludeと通知が消えます。しかし、なぜ?include_onceファイルをロードする必要がありconfig.phpます。

public function get_unit_name($unit_id) 
    {   
            include_once("config.php");
            return $unit_names[$unit_id];
    }   
4

1 に答える 1

7

include_once指定されたファイルを少なくとも1 回ロードするのではなく、正確に1 回ロードします。関数を 2 回目に呼び出すと、ファイルは既に含まれているため、再度含まれることはないため、エラー メッセージが表示されます。

これの考え方は、関数またはクラスの定義を含むファイル、つまり複数回ロードされるとエラーを生成するファイルをインクルードするときにinclude_once/を使用することです。require_onceファイルを 2 回以上ロードしても問題ない場合は、常にinclude()代わりにinclude_once().

代わりに、次のようなことを検討してください (毎回ファイルを再インクルードするコストを節約するため):

private $unit_names = null;

public function get_unit_name($unit_id) {   
    if ($this->unit_names === null) {
        include("config.php");
        $this->unit_names = $unit_names;
    }

    return $this->unit_names[$unit_id];
}
于 2012-12-09T11:24:24.010 に答える