PHPにおけるOOPでの親メソッドのオーバーライド

子クラスは、同じ名前のメソッドを作成することで親のメソッドをオーバーライドすることができます。 例を見てみましょう。以下の親クラスがあるとします:

php<?php
  class User {
    private $name;
    
    public function setName($name) {
      $this->name = $name;
    }
    public function getName() {
      return $this->name;
    }
  }
?>

子クラスで同名のメソッドを作成してみましょう:

php<?php
  class Student extends User {
    public function setName($name) {
      
    }
  }
?>

通常、親メソッドのオーバーライドは、そのメソッドの動作を変更したり追加したりするために行われます。 この例では、名前の長さのチェックを追加してみましょう:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'student name error';
      }
    }
  }
?>

オーバーライドされたメソッドが確実に呼び出されることを確認しましょう。 まず、子クラスのオブジェクトを作成します:

php<?php
  $student = new Student;
?>

次に、正しい値を渡してメソッドを呼び出します:

php<?php
  $student->setName('john');
?>

次に、不正な値を渡してメソッドを呼び出します。 結果として、例外がスローされるのがわかります:

php<?php
  $student->setName(''); // エラー
?>
Задание 1

Userクラスで年齢のゲッターとセッターを作成してください。

Задание 2

Employeeクラスで年齢のセッターをオーバーライドし、年齢が18歳から65歳までの範囲であることをチェックするようにしてください。