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
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
$user = new User();
?>
La oss nå prøve å skrive en korrekt verdi:
<?php
$user->setName('john');
?>
Og la oss nå prøve å skrive en ukorrekt verdi:
<?php
$user->setName(''); // feil
?>
I klassen Employee, i setteren for
alder, gjør en sjekk for at
alderen må være
fra 0 til 120.
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.