Hentning af egenskaber gennem magi i OOP i PHP
Næste magiske metode, som vi
skal se på, hedder __get. Denne
metode aktiveres ved forsøg på at læse værdien
af en privat eller beskyttet egenskab.
Hvis metoden __get implementeres i en
klasse, vil alle henvisninger til ikke-eksisterende
eller skjulte egenskaber blive håndteret af
denne metode.
PHP vil automatisk sende navnet på den anmodede egenskab til den første parameter af denne metode, og den værdi, der returneres af denne metode, vil blive opfattet som værdien af den egenskab, der blev henvist til.
Det er sandsynligvis ikke særlig klart endnu, hvordan det
fungerer, så lad os se på et praktisk
eksempel. Antag, at vi har en klasse
Test med en privat og en offentlig
egenskab:
<?php
class Test
{
public $prop1 = 1; // offentlig egenskab
private $prop2 = 2; // privat egenskab
}
?>
Lad os tilføje den magiske metode
__get til vores klasse, som til at starte med blot vil
returnere navnet på den egenskab, der blev henvist til:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // returner blot egenskabens navn
}
}
?>
Lad os teste den magiske metodes funktionalitet. Vi henviser til tre typer egenskaber: til den offentlige egenskab, til den private og til en ikke-eksisterende:
<?php
$test = new Test;
// Henviser til den offentlige egenskab:
echo $test->prop1; // viser 1 - altså egenskabens værdi
// Henviser til den private egenskab:
echo $test->prop2; // viser 'prop2' - egenskabens navn
// Henviser til en ikke-eksisterende egenskab:
echo $test->prop3; // viser 'prop3' - egenskabens navn
?>
Som du kan se, reagerer vores magiske metode på henvisning til private og ikke-eksisterende egenskaber, men ignorerer henvisning til offentlige - de fungerer som de gjorde før.