⊗ppOpMgROP 89 of 107 menu

PHP-də OOP-də Yalnız Oxu üçün Xassələr

Gəlin, bütün xassələri private olan bir sinifə baxaq:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

İndi bu xassələrin xarici dünyada yalnız oxu üçün əlçatan olmasını təmin edək. Bunu əvvəllər də etmişik, hər bir xassə üçün getterlər yaradır və setterlər yaratmırdıq.

Gəlin indi bu problemi həll etmək üçün sehrli __get metodundan istifadə edək. İstənilən xassənin qiymətini onda qaytaraq. Bunu necə etmək olar: istənilən xassənin adı __get metodunun parametrinə düşür, bizim halda $property.

Bu o deməkdir ki, biz adı dəyişəndə saxlanılan xassəni belə oxuya bilərik: $this->$property (xassənin adı dəyişən olacaq, yəni əvvəlcə dollar işarəsi ilə, biz bunu əvvəlki dərslərdə keçmişdik).

Gəlin təsvir edilən __get metodunu edək:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Xassələri oxumaq üçün ondan istifadə edək:

<?php $test = new Test; echo $test->prop1; // 1 çap edəcək echo $test->prop2; // 2 çap edəcək ?>

Xassəyə bir şey yazmaq cəhdi səhvə səbəb olacaq:

<?php $test = new Test; $test->prop1 = 2; // səhv verəcək ?>

Bu bizim üçün lazım olan şeydir: xassəni oxumaq olar, amma yazmaq olmaz.

Mövcud olmayan xassəni oxumaq cəhdi səhv verəcək:

<?php $test = new Test; echo $test->prop3; // səhv verəcək ?>

Aşağıdakı nüansə da diqqət yetirin: biz xassələri yalnız oxu üçün köhnə üsulla etdiyimiz zaman, xassəni oxumaq üçün getter-metodundan istifadə edirdik.

Yeni üsulda biz sanki onlar public imiş kimi dəqiq xassələrə müraciət edəcəyik. Amma onlara sanki private imiş kimi yaza bilməyəcəyik.

Tutaq ki, User adlı bir sinif verilib, onun xassələri getterlər vasitəsilə yalnız oxu üçün əlçatandır:

<?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; } } ?>

Bu sinfin kodunu elə dəyişin ki, getterlər əvəzinə sehrli __get metodu istifadə olunsun.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et