Att hämta egenskaper genom magi i OOP i PHP
Nästa magiska metod som vi ska
analysera kallas __get. Denna
metod aktiveras när man försöker läsa värdet
på en privat eller skyddad egenskap.
Om man implementerar metoden __get i någon
klass, så kommer alla försök att komma åt icke-existerande
eller dolda egenskaper att hanteras
av denna metod.
Samtidigt kommer PHP automatiskt att skicka namnet på den efterfrågade egenskapen som den första parametern i denna metod, och det värde som returneras av denna metod kommer att uppfattas som värdet på egenskapen som man försökte komma åt.
Det är förmodligen inte så tydligt hur det här
fungerar än, så låt oss titta på ett praktiskt
exempel. Låt oss säga att vi har en klass
Test med en privat och en publik
egenskap:
<?php
class Test
{
public $prop1 = 1; // publik egenskap
private $prop2 = 2; // privat egenskap
}
?>
Låt oss lägga till den magiska metoden
__get i vår klass, som till att börja med helt enkelt kommer att
returnera namnet på egenskapen som man försökte komma åt:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // returnera bara egenskapens namn
}
}
?>
Låt oss testa hur den skapade magiska metoden fungerar. Låt oss försöka komma åt tre typer av egenskaper: till en publik egenskap, till en privat egenskap och till en icke-existerande egenskap:
<?php
$test = new Test;
// Kommer åt den publika egenskapen:
echo $test->prop1; // skriver ut 1 - det vill säga egenskapens värde
// Kommer åt den privata egenskapen:
echo $test->prop2; // skriver ut 'prop2' - egenskapens namn
// Kommer åt en icke-existerande egenskap:
echo $test->prop3; // skriver ut 'prop3' - egenskapens namn
?>
Som ni ser reagerar vår magiska metod på försök att komma åt privata och icke-existerande egenskaper, men ignorerar försök att komma åt publika - de fungerar som de alltid har gjort.