Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ppOpIhPPP 33 of 107 menu
◀ ▶

PHP da OOP da meros olishda xususiy xususiyatlar muammosi

Xususiy xususiyatlar meros olinmasligi kutilmagan muammoga olib kelishi mumkin. Keling, buni misol bilan ko'ramiz. Faraz qilaylik, bizda quyidagi ota-sinf xususiy xususiyatga ega:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

Faraz qilaylik, voris sinfda biz yoshni birga oshiradigan metod yaratmoqchimiz. Biroq, ota-sinfin xususiy xususiyatini o'zgartirishga urinish xatolikka olib keladi:

<?php class Student extends User { public function incAge() { $this->age++; // xato } } ?>

Agar voris sinfda xususiy xususiyat $age ni e'lon qilsak, xato yo'qoladi:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

Aynan shu joyda bizni tuzoq kutmoqda! Aslida biz ikkita xususiy xususiyat yaratdik: biri ota-sinfda va biri voris sinfda. Va ular butunlay mustaqil ishlaydi. Bu shuni anglatadiki, ota-sinf metodlari o'z xususiyatini o'zgartiradi, voris sinf metodlari esa o'zini.

Bu muammoning yechimi aslida mavjud. Shunchaki ota-sinfning xususiy xususiyatlarini ushbu ota-sinfning metodlari orqali boshqarish kerak. Keling, kodimizni shunga mos ravishda qayta yozamiz:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

Soddalashtirish mumkin:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

Quyidagi kodda voris sinfda ota-sinf metodi qayta belgilanadi. Ushbu koddagi muammolarni tuzating:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // xato } } } ?>
← →
↑
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