⊗ppOpMgROP 89 of 107 menu

PHP da OOP da Faqat O'qish uchun Mo'ljallangan Xususiyatlar

Keling, barcha xususiyatlari private bo'lgan klassni ko'rib chiqaylik:

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

Endi bu xususiyatlarni tashqi dunyoda faqat o'qish uchun ruxsat etilgan qilaylik. Buni ilgari ham qilganmiz, har bir xususiyat uchun getterlar yaratgan va setterlar yaratmagan holda.

Keling, endi bu vazifani hal qilish uchun sehrli __get metodidan foydalanaylik. Unda so'ralgan xususiyatning qiymatini qaytaramiz. Buni qanday qilish kerak: so'ralgan xususiyatning nomi __get metodining parametriga kiradi, bizning holatda $property.

Bu shuni anglatadiki, biz o'zgaruvchida saqlanadigan xususiyat nomini o'qishimiz mumkin, mana shunday: $this->$property (xususiyat nomi o'zgaruvchi bo'ladi, ya'ni boshida dollar belgisi bilan, biz buni oldingi darslarda o'tganmiz).

Keling, tavsiflangan __get metodini yarataylik:

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

Keling, xususiyatlarni o'qish uchun undan foydalanaylik:

<?php $test = new Test; echo $test->prop1; // 1 ni chiqaradi echo $test->prop2; // 2 ni chiqaradi ?>

Xususiyatga biror narsa yozishga urinish xatolikka olib keladi:

<?php $test = new Test; $test->prop1 = 2; // xatolik beradi ?>

Bu aynan bizga kerak bo'lgan narsa: xususiyatni o'qish mumkin, lekin unga yozib bo'lmaydi.

Mavjud bo'lmagan xususiyatni o'qishga urinish xatolik beradi:

<?php $test = new Test; echo $test->prop3; // xatolik beradi ?>

Shuningdek, quyidagi nuansga e'tibor bering: biz xususiyatlarni faqat o'qish uchun qilganimizda, eskicha usulda, xususiyatni o'qish uchun biz getter-metodidan foydalanganmiz.

Yangi usulda biz xususiyatlarga to'g'ridan-to'g'ri, xuddi ular public bo'lgandek murojaat qilamiz. Lekin ularga xuddi private bo'lgandek yozolmaymiz.

Quyidagi User klassi berilgan bo'lib, uning xususiyatlari faqat o'qish uchun getterlar yordamida ruxsat etilgan:

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

Ushbu klass kodini getterlar o'rniga sehrli __get metodi ishlatiladigan qilib o'zgartiring.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish