PHPにおけるオブジェクト指向プログラミングにおけるセッターとゲッターの利点

前回のレッスンでは、各プロパティに対してゲッターとセッターを作成しました。 なぜこのような複雑な手順が必要なのか、疑問に思うかもしれません。 結局のところ、プロパティをプライベートではなくパブリックにすれば、同じ効果が得られるからです。

その理由は、ゲッターとセッターには利点があるからです:プロパティにアクセスする前に、いくつかのチェックを実行することができます。 たとえば、今回のケースでは、名前と姓を設定する際に、新しい値が空の文字列でないことを確認できます:

php<?php
  class User {
    private $name;
    private $surn;
    
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'name is incorrect';
      }
    }
    
    public function setSurn($surn) {
      if (strlen($surn) > 0) {
        $this->surn = $surn;
      } else {
        echo 'surn is incorrect';
      }
    }
    
    public function getName() {
      return $this->name;
    }
    
    public function getSurn() {
      return $this->surn;
    }
  }
?>

これがどのように機能するか、確認してみましょう。 まず、クラスのオブジェクトを作成します:

php<?php
  $user = new User();
?>

次に、正しい値を設定してみます:

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

そして今度は、不正な値を設定してみます:

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

Employee クラスの年齢セッターで、 年齢が 0 から 120 の間であることを 確認するチェックを追加してください。

Задание 2

Employee クラスの給与ゲッターで、 給与を読み取る際に、その値の末尾に ドル記号が追加されるようにしてください。