Чтение несуществующего свойства в ООП в PHP
Давайте попробуем записать данные в несуществующее свойство - это будет работать:
<?php
$test = new Test;
$test->prop3 = 3; // запишем 3
echo $test->prop3; // выведет 3
?>
Пусть мы не хотим разрешать записывать в
несуществующие свойства. И, вообще, хотим
разрешить запись только в свойства prop1
и prop2.
Это легко сделать - достаточно в методе __set
добавить соответствующее условие:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
// Напишем условие:
if ($property == 'prop1' or $property == 'prop2') {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>
Если таких свойств будет много, то не очень удобно перечислять их все в условии.
Давайте запишем разрешенные для записи свойства
в массив и будем проверять наличие свойства
в этом массиве с помощью функции
in_array:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$properties = ['prop1', 'prop2']; // разрешенные свойства
if (in_array($property, $properties)) {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>