派生クラスのコンストラクターを呼び出すときに、基本クラスオブジェクトがまだ構築されておらず、メンバーが存在しないため、基本クラスのコンストラクターが呼び出される前に基本クラスのメンバーを使用できないと思っていましたが、次のテストで、基本クラスのコンストラクターを呼び出す前に、基本クラスのメンバーが既に存在し、基本クラスのコンストラクターが基本クラスのメンバーの値を変更するだけであることがわかりました。
class base {
public $i = 4;
public function func() {
print("in base's func" . PHP_EOL);
}
public function __construct() {
print("in base's construct" . PHP_EOL);
$this->i = 3;
}
}
class derive extends base {
public function __construct() {
print("start derive's constructor" . PHP_EOL);
self::func();
print("before base's construct: \$i = $this->i" . PHP_EOL);
parent::__construct();
print("after base's construct: \$i = $this->i" . PHP_EOL);
}
}
$deriveObj = new derive();
上記のコードを
実行します。基本クラスのコンストラクターを実行する前に、基本クラスのメンバー関数とデータメンバーを呼び出すことができることがわかります。