PHP-də OOP-də sehr ilə xassələrin yazılması
Sehrli metod __set
mövcud olmayan və ya gizli xassənin
qiymətini dəyişməyə cəhd edildikdə
çağırılır. O, parametr kimi xassənin
adını və ona təyin etməyə çalışdıqları
qiyməti qəbul edir.
Gəlin praktiki nümunəyə baxaq.
Tutaq ki, bizə Test adlı belə bir sinif verilib:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Gəlin bu sinifdə __set sehrli
metodunu edək, hansı ki, var_dump
funksiyası vasitəsilə müraciət edilən
xassənin adını və ona təyin edilməyə çalışılan
qiyməti çap edəcək:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Sinifimizin işini yoxlayaq:
<?php
$test = new Test;
$test->prop = 'value'; // __set metodunun var_dump'ı 'prop value' çap edəcək
?>
Gəlin indi dəyişəndə saxlanılan adı olan
xassəyə qiymət təyin edək
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // qiyməti təyin edirik
}
}
?>
İndi biz xarici olaraq privet xassələrə yaza biləcəyik:
<?php
$test = new Test;
$test->prop1 = 1; // 1 yazaq
$test->prop2 = 2; // 2 yazaq
?>
Yaza bilərik, lakin, oraya nə isə yazılıb-yazılmadığını yoxlaya bilmərik, çünki xassələr privetdir.
Bu xassələr üçün getter edə bilərik və ya
sadəcə sehrli metoddan istifadə edə bilərik
__get. İkinci variantdan istifadə edək:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Sehrli xassə getteri:
public function __get($property)
{
return $this->$property;
}
}
?>
İndi biz sinifimizin işini yoxlaya bilərik. Yoxlayaq:
<?php
$test = new Test;
$test->prop1 = 1; // 1 yazaq
$test->prop2 = 2; // 2 yazaq
echo $test->prop1; // 1 çap edəcək
echo $test->prop2; // 2 çap edəcək
?>
Əslində, əlbəttə ki, privet xassələrə hər kəsə yazmağa icazə vermək olmaz, əks halda bu privet xassələrin mənası itər (onları sadəcə publik etmək və hamısını etmək daha asandır).
Ona görə də bu metod yalnız həqiqətən ehtiyac olduqda tətbiq edilməlidir. Növbəti dərslərdə biz uğurlu tətbiq nümunələrini də nəzərdən keçirəcəyik.