コンストラクタは継承される
<?php class Base{ public function __construct($message){ echo $message.'<br>'; } } class Sub extends Base{} class Sub2 extends Base{ public function __construct(){} } $sub = new Sub('hoge'); // "hoge"と出力される $sub2 = new Sub2('fuga'); // 何も出力されない ?>
出力
hoge
- 子クラスで定義しない場合、親クラスのコンストラクタに引数がそのまま渡され、コールされる
- 子クラスで定義する場合、親クラスのコンストラクタは明示的にparent::__construct()として呼ぶ必要がある
C++とかだとコンストラクタが勝手に継承されることなんてないので、そこらへんが違いますね。関数オーバーロードができるかどうかの違いによる仕様なのかもしれません。
C++だとシグネチャ(戻り値と引数の組み合わせ)が異なれば同名の関数を定義できますが、PHPでこれと同様のことをしようとするならば、func_num_args(),func_get_args()などを使うと思います。JavaScriptだとarguments配列ですね。