Fördelar med setters och getters i OOP i PHP

I föregående lektion skapade vi för varje egenskap en getter och setter. Man kan undra varför sådana komplikationer är nödvändiga, eftersom man i princip kan uppnå samma effekt genom att göra egenskaperna publika istället för privata.

Saken är den att getters och setters har fördelar: innan åtkomst till en egenskap kan man utföra vissa kontroller. Till exempel, i vårt fall kan vi när vi skriver förnamn och efternamn kontrollera att det nya värdet inte är en tom sträng:

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

Låt oss kolla hur detta fungerar. Först skapar vi ett objekt av klassen:

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

Nu försöker vi skriva ett korrekt värde:

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

Och nu försöker vi skriva ett inkorrekt värde:

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

I klassen Employee, gör i settern för ålder en kontroll så att åldern måste vara från 0 till 120.

Задание 2

I klassen Employee, gör i gettern för lön så att när lönen läses läggs en dollarserong till i slutet av dess värde.