Savybių priskyrimas naudojant magiją OOP PHP
Magiškas metodas __set iškviečiamas
kai bandoma pakeisti neegzistuojančios
ar paslėptos savybės reikšmę. Kaip parametrus
jis priima savybės pavadinimą ir reikšmę, kurią
jai bando priskirti.
Pažiūrėkime į praktinį pavyzdį.
Tarkime, kad turime šią Test klasę:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Sukurkime šioje klasėje magišką
metodą __set, kuris naudodamas funkciją
var_dump išves savybės pavadinimą,
prie kurios buvo kreiptasi, ir reikšmę,
kurią tai savybei bando nustatyti:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Patikrinkime mūsų klasės veikimą:
<?php
$test = new Test;
$test->prop = 'value'; // __set metodo var_dump išves 'prop value'
?>
Dabar bandykime nustatyti reikšmę
savybei, kurios pavadinimas saugomas kintamajame
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // nustatome reikšmę
}
}
?>
Dabar mes galėsime įrašyti į privačias savybes iš klasės išorės:
<?php
$test = new Test;
$test->prop1 = 1; // įrašysime 1
$test->prop2 = 2; // įrašysime 2
?>
Rašyti mes galime, tačiau patikrinti, ar ten kas nors įrašyta - ne, nes savybės yra privatūs.
Galima sukurti getter'į šioms savybėms arba
tiesiog panaudoti magišką metodą
__get. Pasinaudokime antruoju variantu:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Magiškas savybių getter'is:
public function __get($property)
{
return $this->$property;
}
}
?>
Dabar jau galime patikrinti mūsų klasės veikimą. Patikrinkime:
<?php
$test = new Test;
$test->prop1 = 1; // įrašysime 1
$test->prop2 = 2; // įrašysime 2
echo $test->prop1; // išves 1
echo $test->prop2; // išves 2
?>
Tiesą sakant, žinoma, nereikėtų leisti visiems rašyti į privačias savybes, kitaip prarandama tų privačių savybių prasmė (lengviau padaryti jas viešomis ir viskas).
Taigi šis metodas turėtų būti taikomas tik tada, kai tam tikrai yra poreikis. Kitiose pamokose mes dar apsvarstysime pavyzdžius sėkmingo pritaikymo.