Att läsa icke-existerande egenskaper i OOP i PHP
Låt oss försöka skriva data till en icke-existerande egenskap - detta kommer att fungera:
<?php
$test = new Test;
$test->prop3 = 3; // skriver 3
echo $test->prop3; // skriver ut 3
?>
Låt oss säga att vi inte vill tillåta skrivning till
icke-existerande egenskaper. Och generellt sett vill vi
tillåta skrivning endast till egenskaperna prop1
och prop2.
Detta är lätt att göra - det räcker att lägga till
motsvarande villkor i metoden __set:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
// Skriver ett villkor:
if ($property == 'prop1' or $property == 'prop2') {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>
Om det finns många sådana egenskaper är det inte särskilt bekvämt att räkna upp dem alla i villkoret.
Låt oss skriva de tillåtna egenskaperna för skrivning
i en array och kontrollera förekomsten av egenskapen
i denna array med funktionen
in_array:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$properties = ['prop1', 'prop2']; // tillåtna egenskaper
if (in_array($property, $properties)) {
$this->$property = $value;
}
}
public function __get($property)
{
return $this->$property;
}
}
?>