Čítanie neexistujúcej vlastnosti v OOP v PHP
Skúsme zapísať dáta do neexistujúcej vlastnosti - bude to fungovať:
<?php
$test = new Test;
$test->prop3 = 3; // zapíšeme 3
echo $test->prop3; // vypíše 3
?>
Povedzme, že nechceme povoliť zápis do
neexistujúcich vlastností. A vo všeobecnosti chceme
povoliť zápis len do vlastností prop1
a prop2.
To sa ľahko dosiahne - stačí v metóde __set
pridať príslušnú podmienku:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
// Napíšme podmienku:
if ($property == 'prop1' or $property == 'prop2') {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>
Ak by takýchto vlastností bolo veľa, nie je veľmi pohodlné vypisovať ich všetky v podmienke.
Uložme povolené vlastnosti pre zápis
do poľa a budeme kontrolovať prítomnosť vlastnosti
v tomto poli pomocou funkcie
in_array:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$properties = ['prop1', 'prop2']; // povolené vlastnosti
if (in_array($property, $properties)) {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>