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ни чыгарат
?>
Чындыгында, албетте, жашыруун сиздиктерге ар кимге жазууга уруксат берүүгө туура келбейт, анткени анда жашыруун сиздиктердин маңызы жоголот (ачык кылып коюу оңойураак).
Ошондуктан, бул метод чын эле зарыл болгон учурларда гана колдонулушу керек. Кийинки сабактарда биз ийгиликтүү колдонулуунун мисалдарын карайбыз.