PHP da OOP da Klassdan Meros Olish va Interfeysni Amalga Oshirish
Klass boshqa klassdan meros olishi mumkin va shu bilan birga qandaydir interfeysni amalga oshirishi mumkin. Buni amaliy misolda ko'rib chiqaylik.
Faraz qilaylik, biz Programmer klassini yaratmoqchimiz,
uning ismi, maoshi va dasturchi biladigan
tillar ro'yxati bo'ladi.
Hozircha bizning klassimizning tavsifi aniq emas:
ha, klassda ism, maosh, tillar bo'ladi -
lekin bizning klassimizda qanday metodlar bo'ladi?
Keling, klassimizni iProgrammer interfeysi yordamida
anroq tavsiflab beraylik:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Faraz qilaylik, biz allaqachon yaratgan klasslarimizni
tekshirdik va, ma'lum bo'lishicha, bizda allaqachon
o'xshash Employee klassi mavjud. U Programmer
klassining barcha metodlarini amalga oshirmaydi, lekin bir qismini amalga oshiradi.
Bizda mavjud bo'lgan klassning kodi:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
Bizning holatda mantiqan shunday qilish kerakki,
yang Programmer klassimiz kerakli metodlarning bir qismini
Employee klasidan meros oladi (qolgan qismini keyin
yangı klassning o'zida amalga oshiramiz):
<?php
class Programmer extends Employee
{
}
?>
Shu bilan birga, biz bilamizki, Pogrammer klassi
iProgrammer interfeysini amalga oshirishi kerak:
<?php
class Programmer implements iProgrammer
{
}
?>
Keling, Employee klasidan meros olish va
iProgrammer interfeysini amalga oshirishni birlashtiramiz:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Natijada, bizning Pogrammer klassimiz
Employee klasidan __construct, getName va getSalary
metodlarini meros oladi,
addLang va getLangs metodlarini esa
biz amalga oshirishimiz kerak bo'ladi:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// amalga oshirish
}
public function getLangs()
{
// amalga oshirish
}
}
?>
iProgrammer interfeysi uchun farqi yo'q,
metodlar klassning o'ziga xos yoki meros olinganmi -
asosiysi, tavsiflangan barcha metodlar amalga oshirilgan bo'lishi kerak.
Mening Employee klassim va iProgrammer interfeysim kodlarini nusxalang. Mening
Programmer klassim uchun tayyorlovimni nusxalamang -
mening kodimga qaramay, bu klassni o'zingiz amalga oshiring.