Tulajdonságok elérése mágiával az OOP-ban PHP-ben
A következő mágikus metódus, amit
megvizsgálunk, a __get nevet viseli. Ez a
metódus akkor aktiválódik, amikor egy privát vagy védett
tulajdonság értékét próbáljuk elolvasni.
Ha a __get metódust megvalósítjuk valamilyen
osztályban, akkor minden nem létező
vagy rejtett tulajdonsághoz való hozzáférést
ez a metódus fogja kezelni.
Eközben a PHP automatikusan továbbítja a kért tulajdonság nevét ennek a metódusnak az első paramétereként, és a metódus által visszaadott értéket a tulajdonság értékeként fogja értelmezni, amelyhez a hozzáférés történt.
Valószínűleg még nem teljesen világos, hogy ez hogyan
működik, ezért nézzünk egy gyakorlati
példát. Tegyük fel, hogy van egy Test osztályunk
privát és publikus
tulajdonságokkal:
<?php
class Test
{
public $prop1 = 1; // publikus tulajdonság
private $prop2 = 2; // privát tulajdonság
}
?>
Adjunk hozzá az osztályunkhoz egy mágikus metódust
__get, amely kezdetben egyszerűen
visszaadja annak a tulajdonságnak a nevét, amelyhez a hozzáférés
történt:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // egyszerűen visszaadjuk a tulajdonság nevét
}
}
?>
Vizsgáljuk meg a létrehozott mágikus metódus működését. Forduljunk három típusú tulajdonsághoz: publikus tulajdonsághoz, priváthoz és nem létezőhöz:
<?php
$test = new Test;
// Publikus tulajdonsághoz fordulunk:
echo $test->prop1; // kiír 1 - azaz a tulajdonság értékét
// Privát tulajdonsághoz fordulunk:
echo $test->prop2; // kiír 'prop2' - a tulajdonság neve
// Nem létező tulajdonsághoz fordulunk:
echo $test->prop3; // kiír 'prop3' - a tulajdonság neve
?>
Amint látható, a mágikus metódusunk reagál a privát és nem létező tulajdonságokhoz való hozzáférésre, de figyelmen kívül hagyja a publikusokhoz való hozzáférést - azok továbbra is úgy működnek, ahogy korábban.