Запіс уласцівасцей праз магію ў ААП у PHP
Магічны метад __set выклікаецца
пры спробе змяніць значэнне неіснуючай
ці схаванай уласцівасці. У якасці параметраў
ён прымае імя ўласцівасці і значэнне, якое
яму спрабуюць прысвоіць.
Давайце паглядзім на практычным прыкладзе.
Хай у нас дадзены вось такі клас Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Давайце зробім у гэтым класе магічны
метад __set, які з дапамогай функцыі
var_dump будзе выводзіць імя ўласцівасці,
да якой адбыўся зварот, і значэнне,
якое гэтай уласцівасці спрабуюць устанавіць:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Праверым працу нашага класа:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump метаду __set выведе 'prop value'
?>
Давайце цяпер будзем устанаўліваць значэнне
ўласцівасці, імя якой захоўваецца ў зменнай
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // устанаўліваем значэнне
}
}
?>
Цяпер мы зможам запісваць у прыватныя ўласцівасці звонку класа:
<?php
$test = new Test;
$test->prop1 = 1; // запішам 1
$test->prop2 = 2; // запішам 2
?>
Запісваць мы можам, аднак, праверыць, запісалася лі туды што-небудзь - не, так як уласцівасці прыватныя.
Можна зрабіць гетэр для гэтых уласцівасцей альбо
проста скарыстацца магічным метадам
__get. Скарыстаемся другім варыянтам:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Магічны гетэр уласцівасцей:
public function __get($property)
{
return $this->$property;
}
}
?>
Вось цяпер мы можам праверыць працу нашага класа. Праверым:
<?php
$test = new Test;
$test->prop1 = 1; // запішам 1
$test->prop2 = 2; // запішам 2
echo $test->prop1; // выведе 1
echo $test->prop2; // выведе 2
?>
На самай справе, вядома ж, не варта дазваляць усім падшэў запісваць у прыватныя ўласцівасці, інакш прападае сэнс гэтых прыватных уласцівасцей (прасцей зрабіць іх публічнымі і ўсё).
Таму гэты метад варта ўжываць толькі тады, калі ў гэтым сапраўды ёсць неабходнасць. У наступных уроках мы яшчэ разгледзім прыклады ўдалага ўжывання.