Mantojums no klases un interfeisa implementācija OOP PHP
Klase var mantot no citas klases un tajā pašā laikā implementēt kādu interfeisu. Apskatīsim praktiskā piemērā.
Pieņemsim, ka mēs vēlamies izveidot klasi Programmer,
kurai būs vārds, alga un saraksts ar valodām,
ko programmētājs prot.
Pagaidām mūsu klases apraksts ir diezgan neskaidrs:
jā, klasē būs vārds, alga, valodas -
bet kādas metodes būs mūsu klasē?
Precīzāk aprakstīsim mūsu klasi ar
interfeisa iProgrammer palīdzību:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Pieņemsim, ka mēs iedziļinājāmies jau implementētajās
klasēs un, izrādās, mums jau ir līdzīga
klase Employee. Tā implementē ne visas
klases Programmer metodes, bet daļu.
Lūk, jau mums esošās klases kods:
<?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;
}
}
?>
Loģiski mūsu gadījumā būtu darīt tā, lai
mūsu jaunā klase Programmer mantotu
daļu nepieciešamo sev metožu no klases
Employee (un daļu mēs pēcāk implementēsim
jau pašā jaunajā klasē):
<?php
class Programmer extends Employee
{
}
?>
Turklāt mums ir zināms, ka klasei Pogrammer
jāimplementē interfeiss
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Apvienosim mantojumu no klases
Employee un interfeisa iProgrammer
implementāciju:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Izrādīsies, ka mūsu klase Pogrammer
mantos no klases Employee metodes
__construct, getName un getSalary,
bet metodes addLang un getLangs
mums nāksies implementēt:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementācija
}
public function getLangs()
{
// implementācija
}
}
?>
Interfeisam iProgrammer ir vienalga,
vai metodes ir klases pašas vai mantotas -
galvenais, lai visas aprakstītās metodes būtu
implementētas.
Nokopējiet mana klases Employee
kodu un interfeisa iProgrammer kodu. Nekopējiet
manu klases Programmer sagatavi -
iespējami neieskatoties manā kodā, implementējiet šo
klasi patstāvīgi.