Leitura de propriedade inexistente em OOP em PHP
Vamos tentar gravar dados em uma propriedade inexistente - isso vai funcionar:
<?php
$test = new Test;
$test->prop3 = 3; // vamos gravar 3
echo $test->prop3; // exibirá 3
?>
Suponha que não queremos permitir a gravação em
propriedades inexistentes. E, de modo geral, queremos
permitir a gravação apenas nas propriedades prop1
e prop2.
Isso é fácil de fazer - basta adicionar a condição
correspondente no método __set:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
// Vamos escrever a condição:
if ($property == 'prop1' or $property == 'prop2') {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>
Se houver muitas propriedades assim, não é muito prático listar todas elas na condição.
Vamos colocar as propriedades permitidas para gravação
em um array e verificar a existência da propriedade
neste array usando a função
in_array:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$properties = ['prop1', 'prop2']; // propriedades permitidas
if (in_array($property, $properties)) {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>