Ominaisuuksien saaminen taianomaisesti OOP:ssa PHP:ssä
Seuraava taikamenetelmä, jota
käymme läpi, on nimeltään __get. Tämä
menetelmä laukeaa, kun yritetään lukea
yksityisen tai suojatun ominaisuuden arvoa.
Jos toteutat menetelmän __get jossakin
luokassa, kaikki viittaukset olematomiin
tai piilotettuihin ominaisuuksiin käsitellään
tällä menetelmällä.
Samalla PHP välittää automaattisesti pyydetyn ominaisuuden nimen ensimmäisenä parametrina tähän menetelmään, ja tämän menetelmän palauttama arvo nähdään ominaisuuden arvona, johon viitattu.
Luultavasti ei ole vielä kovin selvää, miten tämä
toimii, joten katsotaan käytännön
esimerkkiä. Oletetaan, että meillä on tällainen luokka
Test, jossa on yksityinen ja julkinen
ominaisuus:
<?php
class Test
{
public $prop1 = 1; // julkinen ominaisuus
private $prop2 = 2; // yksityinen ominaisuus
}
?>
Lisätään luokkaamme taikamenetelmä
__get, joka aluksi palauttaa yksinkertaisesti
ominaisuuden nimen, johon viitattu:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // palauta vain ominaisuuden nimi
}
}
?>
Testataan luodun taikamenetelmän toimintaa. Viitataan kolmen tyyppisiin ominaisuuksiin: julkiseen ominaisuuteen, yksityiseen ja olematomaan:
<?php
$test = new Test;
// Viitataan julkiseen ominaisuuteen:
echo $test->prop1; // tulostaa 1 - eli ominaisuuden arvon
// Viitataan yksityiseen ominaisuuteen:
echo $test->prop2; // tulostaa 'prop2' - ominaisuuden nimi
// Viitataan olematomaan ominaisuuteen:
echo $test->prop3; // tulostaa 'prop3' - ominaisuuden nimi
?>
Kuten näette, taikamenetelmämme reagoi viittauksiin yksityisiin ja olematomiin ominaisuuksiin, mutta jättää huomiotta viittaukset julkisiin - ne toimivat kuten ennenkin.