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
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
$user = new User();
?>
Nu försöker vi skriva ett korrekt värde:
<?php
$user->setName('john');
?>
Och nu försöker vi skriva ett inkorrekt värde:
<?php
$user->setName(''); // fel
?>
I klassen Employee, gör i settern för
ålder en kontroll så att åldern måste vara
från 0 till 120.
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.