PHP да ООП да свойстваларни олиш магияси
Биз кўриб чиқадиган кейинги магик метод
__get деб аталади. Бу
метод хулоса ёки химояланган свойстванинг қийматини
ўқишга уриниш пайтида ишга тушади.
Агар бирор классда __get методни амалга оширилса,
унда мавжуд бўлмаган ёки яширин свойстваларга
бўлган барча мурожаатлар
шу метод томонидан қайта ишланади.
Бунинг учун PHP автомат тарзда сўралган свойстванинг номини ушбу методнинг биринчи параметрига ўтказади, ва ушбу метод томонидан қайтарилган қиймат свойстванинг қиймати сифатида қабул қилинади, уңга мурожаат юзага келди.
Эҳтимол, ҳозирча бу қандай ишлаши тушунарли эмас,
шунинг учун амалий мисолга назар солайлик. Бизда Test класси
мавжуд деб фараз қилайлик, унда хулоса ва оммавий
свойствалар мавжуд:
<?php
class Test
{
public $prop1 = 1; // оммавий свойства
private $prop2 = 2; // хулоса свойства
}
?>
Келинг, бизнинг классга магик метод
__get ни қўшайлик, аввало у фақат
сўралган свойстванинг номини қайтарсин:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // фақат свойства номини қайтарамиз
}
}
?>
Яратилган магик методнинг ишлашини текшириб кўрамиз. Уч хил турдаги свойстваларга мурожаат қиламиз: оммавий свойствага, хулоса свойствага ва мавжуд бўлмаган свойствага:
<?php
$test = new Test;
// Оммавий свойствага мурожаат қиламиз:
echo $test->prop1; // 1 ни кўрсатади - яъни свойстванинг қиймати
// Хулоса свойствага мурожаат қиламиз:
echo $test->prop2; // 'prop2' ни кўрсатади - свойстванинг номи
// Мавжуд бўлмаган свойствага мурожаат қиламиз:
echo $test->prop3; // 'prop3' ни кўрсатади - свойстванинг номи
?>
Кўриб турганингиздек, бизнинг магик метод хулоса ва мавжуд бўлмаган свойстваларга мурожаатга жавоб беради, лекин оммавий свойствага мурожаатни эътиборга олмайди - улар аввалги каби ишлайверади.