私が持っている場合:
require_once("bla.php");
class controller{.....}
その後、別のファイルclass control_A extends controller{...}
で作成する場合、もう一度言う必要がありますrequire_once("bla.php");
か、それとも継承されますか?
定義require_once
内で行われた場合はどうなりますか?class controller
私が持っている場合:
require_once("bla.php");
class controller{.....}
その後、別のファイルclass control_A extends controller{...}
で作成する場合、もう一度言う必要がありますrequire_once("bla.php");
か、それとも継承されますか?
定義require_once
内で行われた場合はどうなりますか?class controller
これまでのところ、矛盾する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
か?
継承されたクラスを含める限り、再度要求する必要はありません。
つまり
class1.php:
require_once("tools.php");
class class1 {
}
class2.php:
require_once("class1.php");
class class2 extends class1 {
}