PHPのコンストラクタ継承についてのまとめ。
サブクラスでコンストラクタを定義するとき、および定義しないときで、スーパークラスのコンストラクタ呼び出しが自動で行われるかどうか挙動が変わる。(テストはPHP5.2.6)
サブクラスでコンストラクタを定義しない場合
class PhpSuperClass {
var $x;
var $y;
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}
class PhpSubClass extends PhpSuperClass {
function display() {
echo $this->x . "、" . $this->y;
}
}
$o1 = new PhpSubClass('山田さん', 'こんにちは');
$o1->display();
実行結果。
山田さん、こんにちは
サブクラスで、コンストラクタ定義を行わなければ、サブクラスのインスタンス化により、自動的にスーパークラスのコンストラクタが呼び出されます。
サブクラスでコンストラクタを定義する場合
class PhpSuperClass {
var $x;
var $y;
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}
class PhpSubClass extends PhpSuperClass {
function __construct($x, $y) {
}
function display() {
echo $this->x . "、" . $this->y;
}
}
$o1 = new PhpSubClass('山田さん', 'こんにちは');
$o1->display();
実行結果。
、
function __construct($x, $y) を、サブクラスにおいて定義した場合、スーパークラスのコンストラクタは自動的には呼び出されなくなります。
ですので、スーパークラスのコンストラクタを呼び出したい場合は、以下のように明示的に呼び出す必要がある。
サブクラスのコンストラクタで、スーパークラスのコンストラクタを明示的に呼び出す
class PhpSuperClass {
var $x;
var $y;
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}
class PhpSubClass extends PhpSuperClass {
function __construct($x, $y) {
parent::__construct($x, $y);
}
function display() {
echo $this->x . "、" . $this->y;
}
}
$o1 = new PhpSubClass('山田さん', 'こんにちは');
$o1->display();
parent::__construct($x, $y); と明示的に呼び出すことで、サブクラスのインスタンス化により、スーパークラスのコンストラクタが呼び出される。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/468