Ruxsat modifikatorlari

Klass metodlari va o'zgaruvchilariga kirish huquqlarini o'rnatish uchun biz php kalit so'zidan iborat ya'ni access modifiers dan foydalanamiz. Hatto biz klassni saqlab turish uchun klassga Access Modifiers larni belgilashimiz ham mumkin.

Access Modifiers sifatida ishlatiladigan php kalit so'zlar quyidagilardan iborat:

  1. public: sinf(class) a'zolarini ommaviy deb belgilaganimizda, keyin ular hamma joydan kirishga moyil bo'ladi, hattoki sinf sohasidan tashqarida ham.
  2. private: sinf(class) a'zolarini shaxsiy deb belgilaganimizda, ular faqatgina o'z sinfi ichidangina kirishga moyil bo'ladi.
  3. protected: Bu ham shaxsiy ga o'xshab ketadi bitta istisnodan tashqari ya;ni, protected deb belgilangan sinf a'zolari uning subclasslaridangina kirishga moyil bo'ladi.(Subclasslar haqida Inheritance bilan tanishganimizda ko'proq bilib olasiz).
  4. abstract: Bu kalit so'z faqat PHP classlar va uning a'zo funksiyalari uchun ishlatiladi.
  5. final: final sifatida belgilangan class metodlar, hech qanday subclasslar tomonidan o'zgartirib ham rad etib ham bo'lmaydi.

Qachon qaysi access modifier ishlatiladi?

Biz barcha Access Modifier larni class, uning o'zgaruvchilari va metodlari bilan birga ishlatolmaymiz. Quyidagi jadvalda, qaysi access modifier qaysi bilan ishlatilishi ko'rsatilgan:

image

Endi qaysi access modifier qayerda ishlatilishini bilib oldik, kelin hozir ularni batafsil misollar bilan ko'rib chiqamiz:


public access modifier

Agar biz hech qanday access modifier ni belgilamasak, barcha klass va uning a'zolari standart public sifatida bo'ladi. Yuqorida aytilganidek, public, private yoki protected acmos* lar class lar bilan birga ishlatilmaydi. Agar ishlatilsachi, nima bo'ladi:

*acmos - access modifiers

Natija:

Parse error: syntax error, unexpected 'public' (T_PUBLIC) in ...

Yuqorida bizda xato kelib chiqdi.

Ammo klass metodlar va o'zgaruvchilariga acmosni belgilashimiz mumkin, garchi ular standart public bo'lsa ham.

Yuqoridagi kodda biz klass o'zgaruvchisi oldidan var kalit so'zini ishlatdik. Agar uni ishlatmasak, parse error xatoligiga duch kelamiz.

Ammo var kalit so'zining o'rniga acmos kalit so'zlarni ishlatishimiz mumkin. Misol uchun:


private acmos

private acmosni klass o'zgaruvchilari va metodlari uchun ishlatishimiz mumkin ammo klass uchun emas! Klass a'zosi - o'zgaruvchi yoki funksiya private sifatida e'lon qilingandan keyin unga shunchaki klass obyekti orqali to'g'ridan-to'g'ri kirib bo'lmaydi. Masalan:

Yuqorida lname va fname private klass o'zgaruvchilar hisoblanadi shuning uchun biz ularga to'g'ridan to'g'ri klass obyektidan foydalanib kirolmaymiz.

Quyidagi bir qator kodni sinab ko'rsak:

<?php
    $john->setFName("John");
?>

fatal PHP error ga duch kelamiz:

Fatal error: Cannot access private property Person::$fname in ...

Ammo biz klassning private o'zgaruvchilariga klassda public funksiyani belgilash orqali dostup olishimiz mumkin. Biz alohida private o'zgaruvchilarga qiymat kiritish va ularning qiymatlarini chiqarish uchun funksiyalar yaratamiz. U funksiyalar Getter(Oluvchi) va Setter(Kirituvchi) deb ataladi.

Natija:

Mening ismim: John Wick

Bizda klassda barcha private o'zgaruvchilar uchun getter va setter metodlar bo'lishi kerak!


protected acmos

Bu ham oddiy private acmos ga o'xshab, protected ham klass tashqarisidagi klass o'zgaruvchilar va metodlarini cheklaydi. Ammo protected klass o'zgaruvchi va funksiyalarga klass ichida va subclass(klassni meros qilib oladigan klass) ichida kirish mumkin.

Biz "meros qilib olish tushunchasi" va subklassni yaratish bo'yicha ko'proq kelgusi darslarimizda tanishamiz.

protected acmos namuna:

Yuqoridagi kodda, 2ta klass belgiladik, Human va Male. Male klasi Human klasining subklassi hisoblanadi.

Human klasida barcha klass o'zgaruvchilari va metodlari protected , shuning uchun ularga klassning tashqarisidan kirib bo'lmaydi. Ammo ularga Human subklassi Male klassi ichidan kirish imkoni mavjud.

Agar Inheritance tushunchasi past(sizda) sababli chalkash bo'lib ko'rinsa havotir olmang, keyingi Inheritance bo'yicha darslarimizda qaytamiz bu mavzuga.


abstract acmos

abstrakt acmosi PHP klass va funksiyalar bilan birga ishlatiladi. U klass o'zgaruvchilari bilan birga ishlatilmaydi.

Agar klassda hatto bitta abstrakt metod bo'lsa ham, klass ham abstrakt sifatida belgilanishi kerak.

Shuningdek, PHP abstrakt klassni amalga oshirishda imkon bermaydi bu degani siz abstrakt klassni obyektini yaratolmaysiz hatto klasslar meros qilib olinishi mumkin bolsa ham.

Bu haqida Abstrakt va Interfeyslar mavzusida o'rganamiz.


final acmos

Klassni final acmos sifatida belgilaganimizdan keyin klass meros qilib olinmaydi.

Huddi shunday, klass funksiyasini final deb belgilaganimizda, PHP klassning subklasslari final deb belgilangan funksiya ustidan dominant bo'lib qolmaslikni nazorat qiladi ya'ni cheklaydi. Bu haqida to'liq ma'lumot keyingi darslarimizda...