Het schrijven van eigenschappen via magie in OOP in PHP
De magische methode __set wordt aangeroepen
bij een poging om de waarde van een niet-bestaande
of verborgen eigenschap te wijzigen. Als parameters
accepteert het de naam van de eigenschap en de waarde
die eraan wordt toegekend.
Laten we een praktisch voorbeeld bekijken.
Stel dat we de volgende klasse Test hebben:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Laten we in deze klasse een magische
methode __set maken, die met behulp van de functie
var_dump de naam van de eigenschap
waarop werd geprobeerd toegang te krijgen, en de waarde
die aan deze eigenschap werd probeert in te stellen, weergeeft:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Laten we de werking van onze klasse testen:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump van de __set methode geeft 'prop value' weer
?>
Laten we nu de waarde instellen
voor de eigenschap waarvan de naam is opgeslagen in de variabele
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // stel de waarde in
}
}
?>
Nu kunnen we waarden toekennen aan private eigenschappen van buiten de klasse:
<?php
$test = new Test;
$test->prop1 = 1; // wij ken 1 toe
$test->prop2 = 2; // wij ken 2 toe
?>
We kunnen wel toekennen, maar we kunnen niet controleren of er iets is toegekend, omdat de eigenschappen private zijn.
We kunnen een getter maken voor deze eigenschappen of
gewoon gebruikmaken van de magische methode
__get. Laten we de tweede optie gebruiken:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Magische getter voor eigenschappen:
public function __get($property)
{
return $this->$property;
}
}
?>
Nu kunnen we de werking van onze klasse controleren. Laten we testen:
<?php
$test = new Test;
$test->prop1 = 1; // ken 1 toe
$test->prop2 = 2; // ken 2 toe
echo $test->prop1; // geeft 1 weer
echo $test->prop2; // geeft 2 weer
?>
Natuurlijk is het niet verstandig om zomaar iedereen toe te staan waarden toe te kennen aan private eigenschappen, anders gaat de zin van deze private eigenschappen verloren (het is dan eenvoudiger om ze publiek te maken).
Daarom moet deze methode alleen worden toegepast wanneer daar werkelijk behoefte aan is. In de volgende lessen zullen we nog voorbeelden van geslaagde toepassing bekijken.