Дар PHP дар ООП ба воситаи ҷодугӣ хосиятҳо гирифтан
Усули ҷодуии навбатӣ, ки мо бо
шамо баррасӣ мекунем, __get номида мешавад. Ин
усул вақте фаъол мешавад, ки кӯшиш барои хондани қимати
хосияти махсус ё муҳофизатшуда рух медиҳад.
Агар усули __get-ро дар ягон
синф амалӣ кунем, пас ҳамаи муроҷиатҳо ба хосиятҳои
мавҷуднабуда ё пинҳоншуда бо ин усул
коркард карда мешаванд.
Дар ин ҳолат PHP худкор номи хосияти дархостшударо ба параметри якуми ин усул мегузаронад, ва қимати баргардонидашуда аз ҷониби ин усул ҳамчун қимати хосият қабул карда мешавад, ки ба он муроҷиат рӯй додааст.
Эҳтимолан ҳоло хеле фаҳмо нест, ки ин чӣ гуна
кор мекунад, бинобар ин биёед ба мисоли амалӣ
нигарем. Бигзор мо чунин синфи
Test-ро бо хосияти махсус ва оммавӣ
дошта бошем:
<?php
class Test
{
public $prop1 = 1; // хосияти оммавӣ
private $prop2 = 2; // хосияти махсус
}
?>
Биёед ба синфи мо усули ҷодуии
__get илова кунем, ки барои оғоз танҳо
nomi хосиятро, ки ба он муроҷиат шудааст, баргардонад:
<?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'-ро чоп мекунад - номи хосият
?>
Чунон ки шумо мебинед, усули ҷодуии мо ба муроҷиат ба хосиятҳои махсус ва мавҷуднабуда вокуниш медиҳад, аммо муроҷиат ба хосиятҳои оммавиро номебинад - онҳо ҳамон тавр кор мекунанд, ки пеш кор мекарданд.