PHPでクラスの継承を行う場合、コンストラクタの扱いに注意する必要があります。
[php]
class ParentClass
{
var $value;
function ParentClass(){
$this->value = 1;
}
function getValue(){
return $this->value;
}
}
class SubClass extends ParentClass{
var $ratio;
function SubClass(){
$this->ratio = 2;
}
function getValue(){
return $this->value * $this->ratio;
}
}
$sub = new SubClass();
echo $sub->getValue(); // 0
[/php]
上の例では、親クラス(ParentClass)のコンストラクタで$this->valueに1が代入されています。
一方、子クラス(SubClass)のコンストラクタでは、親クラスのコンストラクタとは異なる処理が実装されています。
この場合、親クラスのコンストラクタは呼び出されず、子クラスの方の処理しか実行されないことになります。
そのため、子クラスで親クラスのコンストラクタでの処理を実行させたい場合、
以下のように明示的に関数を呼び出す必要があります。
[php]
class SubClass extends ParentClass
{
var $ratio;
function SubClass(){
parent::ParentClass(); // 追加
$this->ratio = 2;
}
function getValue(){
return $this->value * $this->ratio;
}
}
[/php]
なお、子クラスでコンストラクタを定義しない場合は、親クラスのコンストラクタが
暗黙的に呼び出されるため、上記のような記述は必要ありません。