Skryf eienskappe deur magie in OOP in PHP
Die magiese metode __set word opgeroep
wanneer daar gepoog word om die waarde van 'n nie-bestaande
of verborge eienskap te verander. As parameters
aanvaar dit die naam van die eienskap en die waarde wat
daaraan toegeken probeer word.
Kom ons kyk na 'n praktiese voorbeeld.
Gestel ons het die volgende klas Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Kom ons maak 'n magiese
metode __set in hierdie klas, wat met behulp van die funksie
var_dump die naam van die eienskap
waartoe toegang verkry is, en die waarde
wat aan daardie eienskap toegeken probeer word, sal vertoon:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Kom ons toets die werk van ons klas:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump van die __set metode sal 'prop value' vertoon
?>
Kom ons probeer nou om 'n waarde toe te ken
aan 'n eienskap waarvan die naam in die veranderlike
$property gestoor word:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // ken die waarde toe
}
}
?>
Nou kan ons in private eienskappe van buite die klas skryf:
<?php
$test = new Test;
$test->prop1 = 1; // skryf 1
$test->prop2 = 2; // skryf 2
?>
Ons kan wel skryf, maar ons kan nie toets of iets daarin geskryf is nie, aangesien die eienskappe privaat is.
Ons kan 'n getter vir hierdie eienskappe maak of
eenvoudig die magiese metode
__get gebruik. Kom ons gebruik die tweede opsie:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Magiese getter vir eienskappe:
public function __get($property)
{
return $this->$property;
}
}
?>
Nou kan ons die werk van ons klas toets. Kom ons toets:
<?php
$test = new Test;
$test->prop1 = 1; // skryf 1
$test->prop2 = 2; // skryf 2
echo $test->prop1; // sal 1 vertoon
echo $test->prop2; // sal 2 vertoon
?>
In werklikheid moet jy natuurlik nie toelaat dat enigiemand in private eienskappe skryf nie, anders verloor hierdie private eienskappe hul betekenis (dit is makliker om hulle publiek te maak en klaar is jy).
Dus moet hierdie metode slegs gebruik word wanneer daar werklik 'n behoefte daaraan is. In die volgende lesse sal ons nog voorbeelde van suksesvolle toepassing oorweeg.