PHP da OOP da sehrli orqali xususiyatlarni yozish
__set sehrli metodi
mavjud bo'lmagan yoki yashirin xususiyatning
qiymatini o'zgartirishga urinilganda chaqiriladi.
Parametr sifatida u xususiyat nomi va unga
tayinlashga urinayotgan qiymatni qabul qiladi.
Keling, amaliy misolni ko'rib chiqaylik.
Bizda Test klassi berilgan bo'lsin:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Keling, ushbu klassda var_dump funksiyasi
yaratdamida, murojaat qilingan xususiyat nomi va
unga o'rnatilmoqchi bo'lgan qiymatni chiqaradigan
__set sehrli metodini yarataylik:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Klassimizning ishlashini tekshiramiz:
<?php
$test = new Test;
$test->prop = 'value'; // __set metodining var_dump'i 'prop value' ni chiqaradi
?>
Endi nomi $property o'zgaruvchisida saqlanayotgan
xususiyatga qiymat o'rnataylik:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // qiymatni o'rnatamiz
}
}
?>
Endi biz private xususiyatlarga klass tashqarisidan qiymat yozishimiz mumkin:
<?php
$test = new Test;
$test->prop1 = 1; // 1 ni yozamiz
$test->prop2 = 2; // 2 ni yozamiz
?>
Biz yozishimiz mumkin, ammo, u erga biror narsa yozilganligini tekshirishimiz mumkin emas, chunki xususiyatlar private.
Ushbu xususiyatlar uchun getter yaratish mumkin yoki
shunchaki __get sehrli metodidan foydalanish mumkin.
Keling, ikkinchi variantdan foydalanamiz:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Xususiyatlar uchun sehrli getter:
public function __get($property)
{
return $this->$property;
}
}
?>
Endi biz klassimizning ishlashini tekshirishimiz mumkin. Tekshiramiz:
<?php
$test = new Test;
$test->prop1 = 1; // 1 ni yozamiz
$test->prop2 = 2; // 2 ni yozamiz
echo $test->prop1; // 1 ni chiqaradi
echo $test->prop2; // 2 ni chiqaradi
?>
Albatta, private xususiyatlarga hammaga yozishga ruxsat berish kerak emas, aks holda ushbu private xususiyatlarning ma'nosi yo'qoladi (ularni oddiygina public qilib qo'yish osonroq).
Shuning uchun ushbu metod faqat haqiqatan zarurat bo'lganda qo'llanilishi kerak. Keyingi darslarda biz buning muvaffaqiyatli qo'llanilishi misollarini ko'rib chiqamiz.