Regjistrimi i Vetive përmes Magjisë në OOP në PHP
Metoda magjike __set thirret
kur përpiqemi të ndryshojmë vlerën e një vetie
që nuk ekziston ose është e fshehur. Si parametra
ai pranon emrin e vetisë dhe vlerën që
përpiqet t'i caktojë.
Le të shohim një shembull praktik.
Le të themi se kemi klasën Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Le të krijojmë në këtë klasë metodën magjike
__set, e cila me anë të funksionit
var_dump do të shfaqë emrin e vetisë,
me të cilën është bërë aksesi, dhe vlerën
që përpiqet të caktohet për këtë veti:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Le të kontrollojmë funksionimin e klasës sonë:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump i metodës __set do të shfaqë 'prop value'
?>
Le të fillojmë të caktojmë vlerën
vetisë, emri i së cilës ruhet në variablin
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // caktojmë vlerën
}
}
?>
Tani do të jemi në gjendje të shkruajmë në vetitë private nga jashtë klasës:
<?php
$test = new Test;
$test->prop1 = 1; // do të shkruajmë 1
$test->prop2 = 2; // do të shkruajmë 2
?>
Ne mund të shkruajmë, megjithatë, të kontrollojmë nëse diçka është shkruar atje - jo, pasi vetitë janë private.
Për këto veti mund të bëhet një getter ose
thjesht të përdoret metoda magjike
__get. Le të përdorim opsionin e dytë:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Getter magjik i vetive:
public function __get($property)
{
return $this->$property;
}
}
?>
Tani mund të kontrollojmë funksionimin e klasës sonë. Le të kontrollojmë:
<?php
$test = new Test;
$test->prop1 = 1; // do të shkruajmë 1
$test->prop2 = 2; // do të shkruajmë 2
echo $test->prop1; // do të shfaqë 1
echo $test->prop2; // do të shfaqë 2
?>
Në fakt, sigurisht, nuk duhet të lejohet që kushdo të shkruajë në vetitë private, përndryshe humbet thelbi i këtyre vetive private (është më lehtë t'i bësh ato publike dhe kaq).
Prandaj kjo metodë duhet të përdoret vetëm kur vërtet ekziston nevoja për të. Në mësimet në vijim do të shqyrtojmë shembuj të përdorimit të suksesshëm.