⊗ppOpIfII 74 of 107 menu

Arv fra klasse og implementering af interface i OOP i PHP

En klasse kan arve fra en anden klasse og samtidig implementere et interface. Lad os se på et praktisk eksempel.

Lad os sige, at vi vil lave en klasse Programmer, som har et navn, en løn og en liste over sprog, som programmøren kan. Vores beskrivelse af klassen er ret vag indtil videre: ja, klassen vil have et navn, en løn, sprog - men hvilke metoder vil vores klasse have?

Lad os beskrive vores klasse mere præcist ved hjælp af interfacet iProgrammer:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Lad os sige, at vi har gravet i vores allerede implementerede klasser, og det viser sig, at vi allerede har en lignende klasse Employee. Den implementerer ikke alle metoderne fra klassen Programmer, men en del. Her er koden for den klasse, vi allerede har:

<?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; } } ?>

Det er logisk i vores tilfælde at gøre sådan, at vores nye klasse Programmer arver de nødvendige metoder fra klassen Employee (og resten implementerer vi så i den nye klasse senere):

<?php class Programmer extends Employee { } ?>

Samtidig ved vi, at klassen Pogrammer skal implementere interfacet iProgrammer:

<?php class Programmer implements iProgrammer { } ?>

Lad os kombinere arv fra klassen Employee og implementering af interfacet iProgrammer:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Resultatet bliver, at vores klasse Pogrammer vil arve fra klassen Employee metoderne __construct, getName og getSalary, mens metoderne addLang og getLangs bliver vi nødt til at implementere selv:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // implementering } public function getLangs() { // implementering } } ?>

Interfacet iProgrammer er ligeglad med, om metoderne er oprindelige i klassen eller arvede - det vigtigste er, at alle de beskrevne metoder er implementeret.

Kopiér koden for min klasse Employee og koden for interfacet iProgrammer. Kopiér ikke min skabelon for klassen Programmer - implementer denne klasse selv uden at kigge på min kode.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis