PHP'de OOP'de Setter ve Getter'ların Avantajları

Önceki derste, her özellik için bir getter ve setter yaptık. Şu soru akla gelebilir: Neden böyle karmaşıklıklara ihtiyaç var? Çünkü aslında aynı etki, özellikleri özel (private) yerine genel (public) yaparak da elde edilebilir.

Olay şu ki, getter ve setter'ların bir avantajı var: Bir özelliğe erişmeden önce bazı kontroller yapılabilir. Örneğin, bizim durumumuzda isim ve soyisimi yazdırırken, yeni değerin boş bir string olmadığını kontrol edebiliriz:

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;
    }
  }
?>

Bunun nasıl çalıştığını test edelim. Öncelikle sınıfın bir nesnesini oluşturalım:

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

Şimdi doğru bir değer yazmayı deneyelim:

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

Ve şimdi de yanlış bir değer yazmayı deneyelim:

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

Employee sınıfında, yaş setter'ında yaşın 0 ile 120 arasında olması gerektiğini kontrol edin.

Задание 2

Employee sınıfında, maaş getter'ında maaş okunduğunda, değerinin sonuna dolar işareti eklenmesini sağlayın.