PHPにおけるOOPでの親メソッドのオーバーライド
子クラスは、同じ名前のメソッドを作成することで親のメソッドをオーバーライドすることができます。 例を見てみましょう。以下の親クラスがあるとします:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
子クラスで同名のメソッドを作成してみましょう:
<?php
class Student extends User {
public function setName($name) {
}
}
?>
通常、親メソッドのオーバーライドは、そのメソッドの動作を変更したり追加したりするために行われます。 この例では、名前の長さのチェックを追加してみましょう:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
オーバーライドされたメソッドが確実に呼び出されることを確認しましょう。 まず、子クラスのオブジェクトを作成します:
<?php
$student = new Student;
?>
次に、正しい値を渡してメソッドを呼び出します:
<?php
$student->setName('john');
?>
次に、不正な値を渡してメソッドを呼び出します。 結果として、例外がスローされるのがわかります:
<?php
$student->setName(''); // エラー
?>
Userクラスで年齢のゲッターとセッターを作成してください。
Employeeクラスで年齢のセッターをオーバーライドし、年齢が18歳から65歳までの範囲であることをチェックするようにしてください。