Tulajdonságok írása mágiával az OOP-ban PHP-ben
A __set mágikus metódus akkor hívódik meg,
amikor egy nem létező vagy rejtett tulajdonság
értékének módosítására tesznek kísérletet. Paraméterként
átveszi a tulajdonság nevét és az értéket, amit
hozzá próbálnak rendelni.
Nézzünk egy gyakorlati példát.
Tegyük fel, hogy adott a következő Test osztály:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Készítsük el ebben az osztályban a
__set mágikus metódust, amely a
var_dump függvény segítségével kiírja a tulajdonság nevét,
amelyhez hozzáférés történt, és az értéket,
amit a tulajdonsághoz próbáltak beállítani:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Vizsgáljuk meg az osztályunk működését:
<?php
$test = new Test;
$test->prop = 'érték'; // a __set metódus var_dump-ja kiírja 'prop érték'
?>
Most pedig állítsuk be az értéket
annak a tulajdonságnak, amelynek neve a
$property változóban tárolódik:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // beállítjuk az értéket
}
}
?>
Mostantól képesek leszünk írni a privát tulajdonságokba az osztályon kívülről:
<?php
$test = new Test;
$test->prop1 = 1; // írjuk be az 1-et
$test->prop2 = 2; // írjuk be a 2-t
?>
Írni tudunk, azonban azt, hogy valóban beírtunk-e oda valamit, nem tudjuk ellenőrizni, mivel a tulajdonságok privátak.
Készíthetünk getter metódust ezekhez a tulajdonságokhoz, vagy
egyszerűen használhatjuk a
__get mágikus metódust. Használjuk a második lehetőséget:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Mágikus getter tulajdonságokhoz:
public function __get($property)
{
return $this->$property;
}
}
?>
Most már ellenőrizhetjük az osztályunk működését. Ellenőrizzük:
<?php
$test = new Test;
$test->prop1 = 1; // írjuk be az 1-et
$test->prop2 = 2; // írjuk be a 2-t
echo $test->prop1; // kiírja 1-et
echo $test->prop2; // kiírja 2-t
?>
Valójában természetesen nem szabad mindenki számára engedélyezni a privát tulajdonságokba való írást, különben elveszik ezeknek a privát tulajdonságoknak a lényege (egyszerűbb volna nyilvánossá tenni őket és kész).
Ezért ezt a metódust csak akkor érdemes alkalmazni, amikor erre valóban szükség van. A következő leckékben további példákat is megvizsgálunk a sikeres alkalmazásra.