2

私が持っている場合:

require_once("bla.php");
class controller{.....}

その後、別のファイルclass control_A extends controller{...}で作成する場合、もう一度言う必要がありますrequire_once("bla.php");か、それとも継承されますか?

定義require_once内で行われた場合はどうなりますか?class controller

4

2 に答える 2

7

これまでのところ、矛盾する2つの答えがありますが、同じように正しい答えがあります=)2つを組み合わせてより具体的な合計の答えにすることができないかどうかを見てみましょう。

のいずれかのクラスでコードまたは定義が必要な場合は、スクリプトの実行時間全体で少なくとも1回bla.phpは必要になります。include("bla.php")以前のコードの場合:

require_once("bla.php");
class controller{.....}

がファイルにある場合は、次の方法でcontroller.php作成できます。control_A

require_once("controller.php");
class control_A extends controller{...}

これは、require_once()関数が基本的にファイルの内容をその行のスクリプトにコピーして貼り付けるためです。したがって、上記はこれと同等であると見なされます。

/* INSERTED FROM controller.php */
/* INSERTED FROM bla.php */
necessary definitions for controller
/* END bla.php */
class controller{.....}
/* END controller.php */
class control_A extends controller{...}

ご覧のとおり、を要求するだけでcontroller.php、コントローラーに必要な定義が表示され、解析されます。できないのは、の宣言を省略することですcontroller。これは、宣言時に必要だっただけでbla.phpなく、まだ宣言されていないクラスを拡張することもできません。したがって、次のコード:

class control_A extends controller{...}

コントローラが定義されていないため、エラーが発生します。

ただし、考慮すべきことが1つあります。このクラスcontrollerは他のクラスを拡張しないため、外部依存関係を持たないようにする必要があります。クラスを定義する前に実行しなければならないことはすべてbla.php不要であるか、再構築できる可能性があります。bla.php定義する前に必要なことは正確に何をしていますcontrollerか?

于 2010-10-11T15:13:05.270 に答える
2

継承されたクラスを含める限り、再度要求する必要はありません。

つまり

class1.php:

require_once("tools.php");
class class1 {

}

class2.php:

require_once("class1.php");
class class2 extends class1 {

}
于 2010-10-11T15:03:56.290 に答える