Oorerving van 'n klas en implementering van 'n koppelvlak in OOP in PHP
'n Klas kan van 'n ander klas oorerf en terselfdertyd 'n koppelvlak implementeer. Kom ons kyk na 'n praktiese voorbeeld.
Laat ons sê ons wil 'n klas Programmer maak,
wat 'n naam, salaris en 'n lys tale het,
wat die programmeerder ken.
Ons beskrywing van die klas is nogal vaag vir nou:
ja, die klas sal 'n naam, salaris, tale hê -
maar watter metodes sal in ons klas wees?
Kom ons beskryf ons klas meer akkuraat met behulp van
die koppelvlak iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Laat ons sê ons het deur ons reeds geïmplementeerde
klasse gesoek en dit blyk dat ons reeds 'n soortgelyke
klas Employee het. Dit implementeer nie al die
metodes van die klas Programmer nie, maar 'n deel.
Hier is die kode van die klas wat reeds by ons bestaan:
<?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;
}
}
?>
Dit is logies in ons geval om te maak dat
ons nuwe klas Programmer 'n deel van die nodige metodes oorerf
van die klas Employee (en 'n deel sal ons later implementeer
in die nuwe klas self):
<?php
class Programmer extends Employee
{
}
?>
Terselfdertyd weet ons dat die klas Pogrammer
die koppelvlak iProgrammer moet implementeer:
<?php
class Programmer implements iProgrammer
{
}
?>
Kom ons kombineer oorerving van die klas
Employee en implementering van die koppelvlak
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Dit sal beteken dat ons klas Pogrammer
die metodes __construct, getName en getSalary sal oorerf
van die klas Employee,
en ons sal die metodes addLang en getLangs
self moet implementeer:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementering
}
public function getLangs()
{
// implementering
}
}
?>
Die koppelvlak iProgrammer maak nie saak nie,
of die metodes eie aan die klas is of geërf is
- die hoofsaak is dat al die beskryfde metodes
geïmplementeer is.
Kopieer die kode van my klas Employee
en die kode van die koppelvlak iProgrammer. Moenie
my klas Programmer se raamwerk kopieer nie -
implementeer hierdie
klas selfstandig sonder om na my kode te kyk.