Īpašību ierakstīšana ar magiju OPHP PHP
Maģiskā metode __set tiek izsaukta
mēģinot mainīt neesošas
vai slēptas īpašības vērtību. Kā parametrus
tā pieņem īpašības nosaukumu un vērtību, kuru
tai mēģina piešķirt.
Apskatīsim praktisku piemēru.
Pieņemsim, ka mums ir dota šāda klase Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Izveidosim šajā klasē maģisko
metodi __set, kas ar funkcijas
var_dump palīdzību izvadīs īpašības nosaukumu,
pie kura notika piekļuve, un vērtību,
ko šai īpašībai mēģina iestatīt:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Pārbaudīsim mūsu klases darbību:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump metodes __set izvadīs 'prop value'
?>
Tagad mēģināsim iestatīt vērtību
īpašībai, kuras nosaukums glabājas mainīgajā
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // iestatām vērtību
}
}
?>
Tagad mēs varēsim ierakstīt privātajās īpašībās ārpus klases:
<?php
$test = new Test;
$test->prop1 = 1; // ierakstīsim 1
$test->prop2 = 2; // ierakstīsim 2
?>
Ierakstīt mēs varam, tomēr pārbaudīt, vai tur kaut kas ierakstījās - nē, jo īpašības ir privātas.
Var izveidot getteri šīm īpašībām vai
vienkārši izmantot maģisko metodi
__get. Izmantosim otro variantu:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Maģiskais getteris īpašībām:
public function __get($property)
{
return $this->$property;
}
}
?>
Tagad mēs varam pārbaudīt mūsu klases darbību. Pārbaudīsim:
<?php
$test = new Test;
$test->prop1 = 1; // ierakstīsim 1
$test->prop2 = 2; // ierakstīsim 2
echo $test->prop1; // izvadīs 1
echo $test->prop2; // izvadīs 2
?>
Patiesībā, protams, nevajadzētu atļaut visiem ierakstīt privātajās īpašībās, pretējā case pazūd šo privāto īpašību jēga (vienkāršāk ir padarīt tās publiskas un viss).
Tāpēc šo metodi vajadzētu lietot tikai tad, kad tam patiešām ir nepieciešamība. Nākamajās nodarbībās mēs vēl apskatīsim piemērus veiksmīgam pielietojumam.