Het verkrijgen van eigenschappen via magie in OOP in PHP
De volgende magische methode die we
gaan behandelen, heet __get. Deze
methode wordt geactiveerd bij een poging om de waarde
van een private of beschermde eigenschap te lezen.
Als je de methode __get in een klasse implementeert,
dan worden alle toegangspogingen tot niet-bestaande
of verborgen eigenschappen afgehandeld
door deze methode.
PHP zal automatisch de naam van de opgevraagde eigenschap doorgeven als eerste parameter van deze methode, en de waarde die door deze methode wordt geretourneerd, wordt gezien als de waarde van de eigenschap waartoe toegang werd gezocht.
Het is waarschijnlijk nog niet erg duidelijk hoe dit
werkt, dus laten we kijken naar een praktisch
voorbeeld. Stel dat we de volgende klasse
Test hebben met een private en een publieke
eigenschap:
<?php
class Test
{
public $prop1 = 1; // publieke eigenschap
private $prop2 = 2; // private eigenschap
}
?>
Laten we aan onze klasse de magische methode
__get toevoegen, die om te beginnen gewoon
de naam van de eigenschap zal teruggeven waartoe toegang
werd gezocht:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // geef gewoon de naam van de eigenschap terug
}
}
?>
Laten we de werking van de gemaakte magische methode testen. We proberen toegang te krijgen tot drie soorten eigenschappen: tot de publieke eigenschap, tot de private eigenschap en tot een niet-bestaande eigenschap:
<?php
$test = new Test;
// Toegang tot de publieke eigenschap:
echo $test->prop1; // geeft 1 - dat is de waarde van de eigenschap
// Toegang tot de private eigenschap:
echo $test->prop2; // geeft 'prop2' - de naam van de eigenschap
// Toegang tot een niet-bestaande eigenschap:
echo $test->prop3; // geeft 'prop3' - de naam van de eigenschap
?>
Zoals je ziet, reageert onze magische methode op toegang tot private en niet-bestaande eigenschappen, maar negeert hij toegang tot publieke - die werken zoals ze eerder werkten.