Fordeler med settere og gettere i OOP i PHP

I forrige leksjon lagde vi en getter og setter for hver egenskap. Man kan spørre seg hvorfor slike komplikasjoner er nødvendige, siden man faktisk kan oppnå samme effekt ved å gjøre egenskapene offentlige, ikke private.

Saken er at gettere og settere har en fordel: før tilgang til en egenskap kan man utføre noen kontroller. For eksempel, i vårt tilfelle kan vi når vi skriver fornavn og etternavn sjekke at den nye verdien ikke er en tom streng:

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

La oss sjekke hvordan dette fungerer. Først, la oss opprette et objekt av klassen:

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

La oss nå prøve å skrive en korrekt verdi:

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

Og la oss nå prøve å skrive en ukorrekt verdi:

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

I klassen Employee, i setteren for alder, gjør en sjekk for at alderen må være fra 0 til 120.

Задание 2

I klassen Employee, i getteren for lønn, gjør slik at når man leser lønnen legges det til et dollartegn på slutten av verdien.