PHPのコンストラクタ継承

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

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); と明示的に呼び出すことで、サブクラスのインスタンス化により、スーパークラスのコンストラクタが呼び出される。


日時: 2009年02月16日 01:17
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/468

この記事にトラックバックされる方は、参照先が分かるようにするために、「PHPのコンストラクタ継承」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - ウェブライフハック