コンストラクタは継承される

<?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配列ですね。