PHP klass va obyekt (OOP asoslari)
Assotsiativ massiv ma’lumotni saqlaydi, lekin u bilan ishlaydigan funksiyalar boshqa joyda turadi. Klass ma’lumot va uni boshqaradigan kodni bir joyga jamlaydi.
Muammo
Ikki muammo: funksiyalar ma’lumotdan ajralgan, va noto’g’ri qiymat yozilishiga hech narsa to’sqinlik qilmaydi.
Birinchi klass
-> belgisi obyekt a’zosiga murojaat qiladi: $aziz->ism, $aziz->tavsif().
constructor — yaratishda to’ldirish
__construct — new paytida avtomatik chaqiriladigan maxsus metod.
Endi obyekt yaratilishi bilan to’liq holatda bo’ladi.
Qisqa yozuv (PHP 8)
Constructor parametriga public yozilsa, PHP xossani o’zi yaratadi va
to’ldiradi. Uch qator o’rniga bitta — zamonaviy PHP’da shu shakl ishlatiladi.
Ko’rinish darajalari
Getter va setter
readonly (PHP 8.1) — bir marta o’rnatiladi va keyin o’zgarmaydi.
Identifikator va nom kabi maydonlar uchun ideal.
static — klassning o’ziga tegishli
static a’zolar obyektga emas, klassga tegishli — new shart emas,
:: bilan chaqiriladi. Ichkarida $this emas, self:: ishlatiladi.
Klass doimiylari
Doimiy const bilan e’lon qilinadi va Klass::NOM orqali o’qiladi.
Bu “sehrli matn” ("yuborildi") larni kod bo’ylab tarqatmaslik uchun.
Obyektlar havola bo’yicha uzatiladi
Amaliy misol — savat
Metod return $this qaytarsa, chaqiruvlarni zanjir qilib yozish
mumkin — bu “fluent interface” naqshi.
Amaliy mashq
Kitobklassini yozing:nom,muallif,yilxossalari bilan;__constructqo’shib, obyekt yaratishda to’ldiring;- PHP 8 qisqa yozuviga o’tkazing;
yilniprivateqilib, getter/setter yozing;- setter’da kelajakdagi yilni rad eting;
statichisoblagich bilan nechta kitob yaratilganini sanang.
Qisqacha xulosa
- Klass — shablon, obyekt — undan yasalgan nusxa (
new). - Xossa va metodga
->bilan murojaat qilinadi; ichkarida$this. __constructobyekt yaratilganda avtomatik ishlaydi.- PHP 8 da constructor parametriga
publicyozib xossa yaratiladi. privatexossa faqat klass ichida ko’rinadi — inkapsulyatsiya.readonlybir marta o’rnatiladi;staticklassga tegishli (::).- Obyektlar havola bo’yicha uzatiladi — nusxa uchun
clone.
Keyingi darsda meros va interfeys — klasslarni kengaytirish.