0

私はこの抽象クラスを持っています

 abstract class Guitar {

        protected $strings;

        public function __construct($no_of_strings) {
            $this->strings = $no_of_strings;
            echo 'Guitar class constructor is called <br/>';
        }

        abstract function play();
    }

そして子クラス、

class Box_Guitar extends Guitar {

    public function __construct($no_of_strings) {
        echo 'Box Guitar constructor is called <br/>';
        $this->strings = $strings + 100;
    }

    public function play() {
        echo 'strumming ' . $this->strings;
    }

}

それから私はクラスを始めました、

$box_guitar = new Box_Guitar(6);

そして、私のアウトプットは

Box Guitarコンストラクターが呼び出されます

Guitar クラスのコンストラクターが呼び出されます

かき鳴らし 106

私の質問は、なぜ親コンストラクターが呼び出されるのですか? Parent::__construct() は使用しませんでした。

4

2 に答える 2

1

そうではありません。

上記のコードを実行すると、次の出力が得られます。

Box Guitar コンストラクターは呼び出され
ます Notice: Undefined variable: strings in /test/test.php 行 19

古いバージョンのファイルなどを実行していないことを再確認してください。いくつかの変更を保存またはアップロードするのを忘れましたか?


記録として、予期しない動作が発生する理由を理解したら、Box_Guitarコンストラクターを記述する正しい方法はおそらく次のようになります。

public function __construct($no_of_strings) {
    echo 'Box Guitar constructor is called <br/>';
    parent::__construct($no_of_strings + 100);
}
于 2013-07-14T08:14:04.100 に答える
0

ありがとう@jcsanyi。私のせいでした。私は別のクラスを持っています、

 class Electric_Guitar extends Guitar {

    public function play() {
        return 'Plug to current : '. $this->strings;
    }
}

これにはコンストラクタがありません。オブジェクトを呼び出すときは、両方を使用しました。

$box_guitar = new Box_Guitar(6);
$elec_guitar = new Electric_Guitar(5);

したがって、abstrct コンストラクターは elec_guitar オブジェクトによって呼び出されました。

于 2013-07-14T08:29:11.403 に答える