Å hente egenskaper gjennom magi i OOP i PHP
Neste magiske metode som vi skal
gå gjennom, heter __get. Denne
metoden utløses når man prøver å lese verdien
til en privat eller beskyttet egenskap.
Hvis man implementerer metoden __get i en
klasse, vil alle tilganger til ikke-eksisterende
eller skjulte egenskaper bli håndtert
av denne metoden.
Samtidig vil PHP automatisk sende navnet på den forespurte egenskapen til den første parameteren til denne metoden, og verdien som returneres av denne metoden vil bli oppfattet som verdien til egenskapen som ble forsøkt å få tilgang til.
Det er sannsynligvis ikke veldig klart ennå hvordan dette
fungerer, så la oss se på et praktisk
eksempel. La oss si at vi har en klasse
Test med en privat og en offentlig
egenskap:
<?php
class Test
{
public $prop1 = 1; // offentlig egenskap
private $prop2 = 2; // privat egenskap
}
?>
La oss legge til den magiske metoden
__get i klassen vår, som til å begynne med bare
skal returnere navnet på egenskapen som det ble forsøkt å få tilgang til:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // returnerer bare navnet på egenskapen
}
}
?>
La oss teste den magiske metoden vi har laget. La oss prøve å få tilgang til tre typer egenskaper: til den offentlige egenskapen, til den private egenskapen og til en ikke-eksisterende egenskap:
<?php
$test = new Test;
// Tilgang til offentlig egenskap:
echo $test->prop1; // vil skrive ut 1 - det vil si verdien av egenskapen
// Tilgang til privat egenskap:
echo $test->prop2; // vil skrive ut 'prop2' - navnet på egenskapen
// Tilgang til ikke-eksisterende egenskap:
echo $test->prop3; // vil skrive ut 'prop3' - navnet på egenskapen
?>
Som du ser, reagerer vår magiske metode på tilgang til private og ikke-eksisterende egenskaper, men ignorerer tilgang til offentlige egenskaper - de fungerer som de alltid har gjort.