PHPдеги ООПдо окуу үчүн гана колдонулуучу касиеттер
Бардык касиеттери приват болгон классты карап көрөлү:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
}
?>
Эми бул касиеттер тышкы дүйнөдө окуу үчүн гана жеткиликтүү болушун камдайлы. Мурун биз ар бир касиет үчүн геттерлерди түзүп, сеттерлерди түзбөстөн ушундай кылганбыз.
Эми бул маселени чечүү үчүн силкинмө __get методунан пайдаланалы.
Анда суралган касиеттин маанисин кайтарабыз. Муну кантип жасайбыз:
суралган касиеттин аты __get методунун параметрине түшөт, биздин учурда
$property.
Демек, аты өзгөрмөдө сакталган касиетти окуй алабыз,
ушундай: $this->$property (касиеттин аты өзгөрмө болот,
башында доллар менен, биз мурунку сабактарда муну өткөнбүз).
Сүрөттөлгөн __get методунун жасайлы:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $this->$property;
}
}
?>
Касиеттерди окуу үчүн аны колдонолу:
<?php
$test = new Test;
echo $test->prop1; // 1 чыгарат
echo $test->prop2; // 2 чыгарат
?>
Касиетке бир нерсе жазууга аракет кылуу катага алып келет:
<?php
$test = new Test;
$test->prop1 = 2; // ката берет
?>
Бул бизге керек нерсе: касиетти окуса болот, бирок жазса болбойт.
Жок касиетти окууга аракет ката берет:
<?php
$test = new Test;
echo $test->prop3; // ката берет
?>
Төмөнкү нюанска да көңүл буруңуз: биз окуу үчүн гана касиеттерди эски жол менен жасоодо, касиетти окуу үчүн биз геттер-методун колдонгонбуз.
Жаңы жолдо биз так касиеттерге кайрылабыз, алар жалпыга ачык сыяктуу. Бирок аларга жаза албайбыз, алар приват сыяктуу.
Төмөнкү User классты берилсин, анын касиеттери
геттерлер аркылуу окуу үчүн гана жеткиликтүү:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Бул класс кодун геттерлердин ордуна силкинмө
метод __get колдонулушу үчүн өзгөртүңүз.