Хосиятҳоро тавассути ҷоду навиштан дар ООП дар 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-ро чоп мекунад
?>
Дар асл, албатта, набояд ба ҳамагоҳ иҷозат дод, ки ба хосиятҳои хусусӣ нависанд, дар акси ҳол мақсади ин хосиятҳои хусусӣ гум мешавад (осонтар аст, ки онҳоро оммавӣ сохта ва ҳама чизро).
Аз ин рӯ, ин усулро бояд танҳо он вақт истифода бурд, ки дар он воқеан зарурат мавҷуд аст. Дар дарсҳои оянда мо боз мисолҳои истифодаи муваффақро дида хоҳем шуд.