⊗ppOpMgSP 91 of 107 menu

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.

azbydeenesfrkakkptruuz