PHP、特に Codeigniter で親クラスから継承する場合、何がparent::__construct or parent::model()
行われますか?
親クラスを作らないと、どのような違いが生じますか__construct
? また、どのような方法が推奨されますか?
-追加した-
重点は、parent::__construct
バージョンに応じて異なる方法での呼び出しに関する Codeigniter 固有の点と、Codeigniter がこれを自動的に実行する場合にこれを省略できるかどうかにあります。
ベストアンサー1
これは通常のクラスコンストラクターです。次の例を見てみましょう。
class A {
protected $some_var;
function __construct() {
$this->some_var = 'value added in class A';
}
function echo_some_var() {
echo $this->some_var;
}
}
class B extends A {
function __construct() {
$this->some_var = 'value added in class B';
}
}
$a = new A;
$a->echo_some_var(); // will print out 'value added in class A'
$b = new B;
$b->echo_some_var(); // will print out 'value added in class B'
ご覧のとおり、クラス B はクラス A からすべての値と関数を継承します。そのため、クラス メンバーはクラス$some_var
A からもクラス B からもアクセスできます。クラス B にコンストラクターを追加したため、クラス B の新しいオブジェクトを作成するときにクラス A のコンストラクターは使用されません。
次に次の例を見てみましょう。
class C extends A {
// empty
}
$c = new C;
$c->echo_some_var(); // will print out 'value added in class A'
ご覧のとおり、コンストラクタを宣言していないため、クラス A のコンストラクタが暗黙的に使用されます。ただし、クラス C と同等の次の操作も実行できます。
class D extends A {
function __construct() {
parent::__construct();
}
}
$d = new D;
$d->echo_some_var(); // will print out 'value added in class A'
parent::__construct();
したがって、子クラスのコンストラクターで何かを実行し、親コンストラクターを実行する場合にのみ、この行を使用する必要があります。例を示します。
class E extends A {
private $some_other_var;
function __construct() {
// first do something important
$this->some_other_var = 'some other value';
// then execute the parent constructor anyway
parent::__construct();
}
}
詳細は以下をご覧ください:http://php.net/manual/en/language.oop5.php