⊗ppOpIfII 74 of 107 menu

Arv fra klasse og implementering av grensesnitt i OOP i PHP

En klasse kan arve fra en annen klasse og samtidig implementere et grensesnitt. La oss se på et praktisk eksempel.

La oss si at vi ønsker å lage en klasse Programmerer, som har et navn, lønn og en liste over språk som programmereren kan. Foreløpig er beskrivelsen av klassen ganske vag: ja, klassen vil ha navn, lønn, språk - men hvilke metoder vil klassen vår ha?

La oss beskrive klassen vår mer nøyaktig ved hjelp av grensesnittet iProgrammerer:

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

La oss si at vi gravde i de allerede implementerte klassene våre og det viser seg at vi allerede har en lignende klasse Ansatt. Den implementerer ikke alle metodene til klassen Programmerer, men en del. Her er koden til klassen som allerede eksisterer hos oss:

<?php class Ansatt { 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 vårt tilfelle å gjøre slik at vår nye klasse Programmerer arver delen av de nødvendige metodene fra klassen Ansatt (og resten implementerer vi så i den nye klassen):

<?php class Programmerer extends Ansatt { } ?>

Samtidig vet vi at klassen Programmerer skal implementere grensesnittet iProgrammerer:

<?php class Programmerer implements iProgrammerer { } ?>

La oss kombinere arv fra klassen Ansatt og implementering av grensesnittet iProgrammerer:

<?php class Programmerer extends Ansatt implements iProgrammerer { } ?>

Det vil si at klassen vår Programmerer vil arve fra klassen Ansatt metodene __construct, getName og getSalary, mens metodene addLang og getLangs må vi implementere:

<?php class Programmerer extends Ansatt implements iProgrammerer { public function addLang($lang) { // implementering } public function getLangs() { // implementering } } ?>

Grensesnittet iProgrammerer bryr seg ikke om metodene er opprinnelige i klassen eller arvede - det viktigste er at alle de beskrevne metodene er implementert.

Kopier koden til klassen min Ansatt og koden til grensesnittet iProgrammerer. Ikke kopier mitt utkast til klassen Programmerer - implementer denne klassen på egen hånd uten å kikke på koden min.

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