Innehållsförteckning
Polymorfism är förmågan hos en abstrakt klass eller ett specifikt objekt att reagera på samma metod med sitt eget beteende. Polymorfism specificerar att en godkänd eller förväntad parameter eller objekt kan anta flera former och ha olika beteenden med samma metoder.När vi utför objektorienterad programmering med polymorfismer måste vi komma ihåg att en instans av en klass eller ett objekt kan åberopas och det kommer att fungera och uppträda på samma sätt oavsett vilken klass objektet tillhör. Om vi har många klasser och objekt måste vi strukturera hierarkierna för klasser och abstrakta klasser väl. En annan fördel är att kunna deklarera eller programmera metoder med samma namn även om deras funktionalitet är helt annorlunda, eftersom vi hänvisar till förekomsten av klassen.
Anta som ett exempel en abstrakt klass som representerar antalet fordon, som gemensamt delar data om bränslenivå, märke och fordonsmodell.
Egenskaperna för fordonsklassen kommer då att vara bränsle som kommer att innehålla antalet liter som laddas i fordonet och märke och modell fordon.
Nedan definierar vi de vanliga metoderna för alla fordon som kommer att ladda bränsle och visar hur mycket som återstår när det används, dessutom måste vi kunna tilldela varje fordon ett märke och en modell och kunna konsultera dess märke och modell också . Därefter definierar vi metoderna för fordonsklassen.
bränsle = $ bränsle; } offentlig funktion visa bränsle () {return $ this-> fuel; } offentlig funktion tilldela fordon ($ märke, $ modell) {$ this-> brandymodel = $ brand. ' '. $ modell; } public function showbrandmodel () {return $ this-> markandmodel; }}?> var13 ->Sedan kommer vi att börja skapa de klasser som ärver från fordon och de kommer att ha sina specifika metoder, till exempel skapar vi klassen Bilar, det kommer att ha egenskapen att avancera bilen och varje gång den går vidare kommer den att förbruka en liter bränsle (så att övningen är lätt att förstå)
klass Bilar förlänger Fordon {public function advance () {// var tionde kilometer förbrukar en liter $ this-> bränsle - = 1; }} // SlutklassNu kommer vi att implementera en allmän klass för föraren av fordonet, här tar vi hänsyn till att en eller flera förare kan köra olika fordon.
I denna klass kommer vi att definiera en generisk eller abstrakt typkonstruktör
funktion __construct ($ object_parameter) {$ this-> myobject = $ object_parameter}Så vi kan sedan manipulera alla objekt som skickas som en parameter för konstruktorn, så vår klass kommer att ha förmågan att ta emot ett objekt som en parameter, det här är polymorfism, det vill säga det kan använda kompletta objekt, till exempel kan vi skicka klassbilarna som en parameter och använda alla deras metoder.
Vi kommer att implementera exemplen i php 5 så det är viktigt att komma ihåg omfattningen av en metod och variablerna, på de flesta språk är det väldigt likt. För att tilldela eller ändra omfattningen av en variabel eller egenskap måste vi använda motsvarande reserverade ord när vi deklarerar variabeln eller metoden enligt den åtkomst eller omfattning som vi vill att den ska ha:
- privat: indikerar att variabeln eller metoden endast kan nås med metoderna i klassen som objektet tillhör och inte från någon annan.
- skyddad: indikerar att variabeln eller metoden är tillgänglig med metoderna för och även från någon av dess underklasser som tillhör denna klass.
- offentlig: indikerar att variabler eller metoder är tillgängliga från någon annan metod eller oavsett var den hör hemma eller vem den tillhör. Var försiktig med offentliga attribut eftersom de kan ändra ett värde som också används av en annan klass eller annan metod.
Därefter skapar vi förarklassen, som kommer att ha följande metoder: ladda bränsle, tilldela fordon, se märke och modell, förflytta fordonet och kontrollera resterande bränsle när det fortskrider.
fordon = $ objekt; } bränslebelastning för allmän funktion ($ bränsle) {$ this-> vehicle-> fuel load ($ fuel); } offentlig funktion tilldela fordon ($ fabrikat, $ modell) {$ detta-> fordon-> tilldela fordon ($ fabrikat, $ modell); } public function brandymodel () {return $ this-> vehicle-> showbrandmodel (); } public function advancevehicle () {$ this-> vehicle-> advance (); } återstående bränsle () {return $ this-> vehicle-> show fuel (); }}?> var13 ->Vi kan se hur vi i varje funktion i klassen Bilar instanserar de vanliga metoderna för Super Vehicles -klassen för att tilldela egenskaper eller metoder som är speciella och inte gemensamma för alla fordon.
Låt oss se hur vi använder dessa klasser och själva polymorfismen.
tilldela fordon ('Ferrari', '550 MARANELLO'). 'Låt oss sedan se de sanna fördelarna med polymorfism och klassarv, låt oss lägga till klassen till
'; // Vi visar det tilldelade fordonet eko $ ferrari-> brandymodel (). '
'; // Vi laddar bränsle i fordonet och anger mängden i liter ekar 'Bränslebelastning'. $ Ferrari-> bränslebelastning (50). '
'; // Vi visar det aktuella bränslemängden eko 'Aktuellt bränsle'. $ Ferrari-> återstående bränsle (). ' liter
'; echo 'Advance -fordon
'; $ ferrari-> advanceVehicle (); echo $ ferrari-> brandymodel (). ' du har '. $ ferrari-> bränsle kvar ().' liter bränsle
'; // Vi skapar en annan instans med ett annat fordon, till exempel kan vi skapa en variabel som är märket och patent $ hondaHB0071 = new Driver (new Autos); echo $ hondaHB0071-> tilldela fordon ('Honda', 'ACCORD'). '
'; echo $ hondaHB0071-> makeandmodel (). '
'; eko 'Bränslebelastning'. $ hondaHB0071-> bränslebelastning (50). '
'; eko 'Aktuellt bränsle'. $ hondaHB0071-> återstående bränsle (). ' liter
'; echo 'Advance Honda -fordon
'; $ hondaHB0071-> advanceVehicle (); echo $ hondaHB0071-> makeandmodel (). ' du har '. $ hondaHB0071-> bränsle kvar ().' liter bränsle
'; ?> var13 ->
// Motorcykelklass Motorcyklar förlänger Fordonet {public function advance () {// var tionde kilometer förbrukar en liter $ this-> bränsle - = 1; }} $ moto = ny förare (nya motorcyklar); echo $ moto-> tilldela fordon ('Yamaha', 'YBR 125'). '
'; echo $ moto-> makeymodel (). '
'; eko 'Bränslebelastning'. $ motorcykel-> bränslebelastning (10). '
'; eko 'Aktuellt bränsle'. $ moto-> kvarvarande bränsle (). ' liter
'; echo 'Förskott motorcykel
'; $ moto-> advanceVehicle (); echo $ moto-> makeymodel (). ' du har lämnat '. $ moto-> fuel resterande ().' liter bränsle
'; ?> var13 ->
Vi kan inkludera de beräkningar som krävs för att göra bränsleförbrukningen mer verklig enligt fordonet.
Fördelen med att använda polymorfism är att vi kan skapa liknande metoder men med olika parametrar till exempel.
Implementering av gränssnitt med pHp
Gränssnitt är deklarationer som definierar vilka metoder som kan implementeras av en klass och döljer hur dessa metoder används eller hanteras. De metoder som deklareras i ett gränssnitt måste vara offentliga för att de klasser som vi implementerar ska kunna nås. De tillåter en inkapsling av klasser och polymorfismer.
För att implementera ett gränssnitt med php används nyckelordet implementerar. Om vi har flera metoder deklarerade i ett gränssnitt måste de implementeras i en klass. Klasser kan implementera mer än ett gränssnitt för att kunna komma åt olika metoder så att vi kan ha olika funktioner i olika klasser.
Vi ser ett exempel på gränssnitt
Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng