PHP-те ООЖ-да сипаттарды жазу сиқыры
Сиқырлы әдіс __set
жоқ немесе жасырын сипаттың мәнін
өзгерту әрекеті кезінде шақырылады.
Ол параметр ретінде сипат атауын және
оған тағайындауға тынысқан мәнін қабылдайды.
Тәжірибелік мысалды қарастырайық.
Бізде Test деген клас берілсін:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Осы класта var_dump функциясын қолданып,
сипаттағы сілтеме атауы мен сол сипатқа
орнатылуға тынысқан мәнін шығаратын
сиқырлы әдіс __set жасайық:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Класымыздың жұмысын тексерейік:
<?php
$test = new Test;
$test->prop = 'value'; // __set әдісінің var_dump-ы '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 шығарады
?>
Әрине, жеке сипаттарға бәріне жазуға рұқсат бермеу керек, әйтпесе бұл жеке сипаттардың мағынасы жоғалады (оларды жай жалпыға бірдей жасап қою оңайырақ).
Сондықтан бұл әдісті тек қажет болған жағдайда ғана қолдану керек. Келесі сабақтарда біз оны сәтті қолдану мысалдарын қарастырамыз.