PHPにおけるOOPでのオーバーライドされたメソッドの呼び出し
オーバーライドすると、子クラスは親クラスのオーバーライドされたメソッドへのアクセスを失います。しかし、それでもアクセスすることは可能です。これは、親クラスを指すキーワードparentを使用して行います。
親クラスのメソッドへのアクセスが必要になる可能性のある例を見てみましょう。 次の親クラスがあるとします:
<?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) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
オーバーライドされたメソッドでは、条件が満たされた場合、事実上親クラスのメソッドのコードが実行されていることがわかります。これは不要なコードの重複です。
親クラスのメソッドを呼び出せば、この重複を取り除くことができます。やってみましょう:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // 親クラスのメソッド
} else {
echo 'student name error';
}
}
}
?>
次のコードがあります:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
} else {
echo 'need age less 120';
}
}
}
?>
Employeeクラスで、親クラスの元のメソッドを使用して、年齢のセッターを簡略化して修正してください。