Наследување од класа и имплементација на интерфејс во ООП во PHP
Класата може да наследува од друга класа и притоа да имплементира некој интерфејс. Да разгледаме на практичен пример.
Нека сакаме да направиме класа Programmer,
кај што ќе има име, плата и список на јазици
кои ги знае програмерот.
Засега нашето опишување на класата е доста нејасно:
да, во класата ќе има име, плата, јазици -
но кои методи ќе има во нашата класа?
Да го опишеме нашата класа попрецизно со помош
на интерфејсот iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Нека пребарувавме во веќе имплементираните
класи и, излегува, веќе имаме слична
класа Employee. Таа не ги имплементира сите
методи на класата Programmer, но дел од нив.
Еве го кодот на веќе постоечката класа кај нас:
<?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;
}
}
?>
Логично е во нашиот случај да направиме така што
нашата нова класа Programmer да наследи
дел од потребните методи од класата
Employee (а дел од нив подоцна ќе ги имплементираме
во самата нова класа):
<?php
class Programmer extends Employee
{
}
?>
Притоа ни е познато дека класата Pogrammer
треба да го имплементира интерфејсот
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Да ги совместиме наследувањето од класа
Employee и имплементацијата на интерфејсот
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Ќе испадне дека нашата класа Pogrammer
ќе наследи од класата Employee методите
__construct, getName и getSalary,
а методите addLang и getLangs
ќе мораме да ги имплементираме ние:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// имплементација
}
public function getLangs()
{
// имплементација
}
}
?>
На интерфејсот iProgrammer му е сеедно,
дали методите се родни во класата или наследени
- главно, сите опишани методи да се имплементирани.
Копирајте го кодот на мојата класа Employee
и кодот на интерфејсот iProgrammer. Не копирајте
ја мојата подготвена класа Programmer -
без да го гледате мојот код имплементирајте ја оваа
класа самостојно.