Indholdsfortegnelse
Polymorfisme er evnen hos en abstrakt klasse eller et specifikt objekt til at reagere på den samme metode med sin egen adfærd. Polymorfisme angiver, at en bestået eller forventet parameter eller objekter kan antage flere former og have forskellig adfærd med de samme metoder.Når vi udfører objektorienteret programmering med polymorfier, skal vi huske på, at en forekomst af en klasse eller et objekt kan påberåbes, og det vil fungere og opføre sig det samme, uanset hvilken klasse objektet tilhører. Hvis vi har mange klasser og objekter, skal vi strukturere hierarkierne af klasser og abstrakte klasser godt. En anden fordel er at kunne deklarere eller programmere metoder med samme navn, selvom deres funktionalitet er helt anderledes, da vi refererer til klassen.
Antag som et eksempel en abstrakt klasse, der repræsenterer antallet af køretøjer, der som nogle fælles data deler brændstofniveau, fabrikat og køretøjsmodel.
Egenskaberne i køretøjsklassen vil derefter være brændstof, der indeholder det antal liter, der læsses i køretøjet og mærke og model køretøj.
Nedenfor definerer vi de almindelige metoder for alle de køretøjer, der vil fylde brændstof og viser, hvor meget der er tilbage, da det bruges, derudover skal vi være i stand til at tildele hvert køretøj et mærke og en model og også kunne konsultere dets mærke og model . Dernæst definerer vi metoderne for køretøjsklassen.
brændstof = $ brændstof; } offentlig funktion vis brændstof () {return $ this-> fuel; } offentlig funktion tildele køretøj ($ brand, $ model) {$ this-> brandymodel = $ brand. ' '. $ model; } offentlig funktion showbrandmodel () {return $ this-> markandmodel; }}?> var13 ->Derefter begynder vi at oprette de klasser, der arver fra køretøjer, og de vil have deres særlige metoder, for eksempel opretter vi klassen biler, det vil have ejendommen til at rykke bilen frem, og hver gang den går frem, vil den forbruge en liter brændstof (så øvelsen let forstås)
klasse Biler forlænger Køretøj {public function advance () {// hver 10. kilometer forbruger en liter $ this-> brændstof - = 1; }} // SlutklasseNu implementerer vi en generel klasse for føreren af køretøjet, her tager vi højde for, at en eller flere førere kan køre forskellige køretøjer.
I denne klasse vil vi definere en generisk eller abstrakt type konstruktør
funktion __construct ($ object_parameter) {$ this-> myobject = $ object_parameter}Så vi kan derefter manipulere ethvert objekt, der sendes som en parameter for konstruktøren, så vores klasse vil have evnen til at modtage et objekt som en parameter, dette er polymorfisme, det vil sige, det kan bruge komplette objekter, for eksempel kan vi sende klassebiler som parameter og bruge alle deres metoder.
Vi vil implementere eksemplerne i php 5, så det er vigtigt at huske omfanget af en metode og variablerne, på de fleste sprog er det meget ens. For at tildele eller ændre omfanget af en variabel eller ejendom skal vi bruge det tilsvarende reserverede ord, når vi erklærer variablen eller metoden i henhold til den adgang eller det omfang, vi ønsker, at den skal have:
- privat: angiver, at variablen eller metoden kun kan tilgås af metoderne i den klasse, som objektet tilhører og ikke fra andre.
- beskyttet: angiver, at variablen eller metoden er tilgængelig med metoderne i og også fra enhver af dens underklasser, der tilhører denne klasse.
- offentlig: angiver, at variabler eller metoder er tilgængelige fra enhver anden metode eller uanset hvor den hører hjemme eller hvem den tilhører. Vær forsigtig med offentlige attributter, da de kan ændre en værdi, der også bruges af en anden klasse eller anden metode.
Dernæst opretter vi førerklassen, som vil have følgende metoder: påfyldning af brændstof, tildeling af køretøj, visning af mærke og model, fremføring af køretøj og kontrollere det resterende brændstof, efterhånden som det skrider frem.
køretøj = $ objekt; } brændstofbelastning i offentlig funktion ($ brændstof) {$ dette-> køretøj-> brændstofbelastning ($ brændstof); } offentlig funktion tildele køretøj ($ mærke, $ model) {$ dette-> køretøj-> tildele køretøj ($ mærke, $ model); } public function brandymodel () {return $ this-> vehicle-> showbrandmodel (); } public function advancevehicle () {$ this-> vehicle-> advance (); } resterende brændstof til offentlig funktion () {return $ this-> vehicle-> show fuel (); }}?> var13 ->Vi kan se, hvordan vi i hver funktion i klassen Biler instanser de almindelige metoder i Super Vehicles -klassen for at tildele egenskaber eller metoder, der er særlige og ikke fælles for alle køretøjer.
Lad os derefter se, hvordan du bruger disse klasser og selve polymorfismen.
tildele køretøj ('Ferrari', '550 MARANELLO'). 'Lad os derefter se de sande fordele ved polymorfisme og klassearv, lad os tilføje klassen til
'; // Vi viser det tildelte køretøjs ekko $ ferrari-> brandymodel (). '
'; // Vi fylder brændstof i køretøjet, hvilket angiver mængden i liter, ekko 'Brændstofbelastning'. $ Ferrari-> brændstofbelastning (50). '
'; // Vi viser det aktuelle brændstofmængdeekko 'Aktuelt brændstof'. $ Ferrari-> resterende brændstof (). ' liter
'; ekko 'Advance -køretøj
'; $ ferrari-> advanceVehicle (); echo $ ferrari-> brandymodel (). ' du har '. $ ferrari-> brændstof tilbage ().' liter brændstof
'; // Vi opretter en anden instans med et andet køretøj, for eksempel kan vi oprette en variabel, der er mærket og patent $ hondaHB0071 = ny driver (ny bil); echo $ hondaHB0071-> tildele køretøj ('Honda', 'ACCORD'). '
'; ekko $ hondaHB0071-> makeandmodel (). '
'; ekko 'Brændstofbelastning'. $ hondaHB0071-> brændstofbelastning (50). '
'; ekko 'Aktuelt brændstof'. $ hondaHB0071-> resterende brændstof (). ' liter
'; ekko 'Advance Honda -køretøj
'; $ hondaHB0071-> advanceVehicle (); ekko $ hondaHB0071-> makeandmodel (). ' du har '. $ hondaHB0071-> resterende brændstof ().' liter brændstof
'; ?> var13 ->
// Motorcykelklasse Motorcykler forlænger Køretøj {offentlig funktion forhånd () {// hver 10. kilometer forbruger en liter $ this-> brændstof - = 1; }} $ moto = ny driver (nye motorcykler); echo $ moto-> tildel køretøj ('Yamaha', 'YBR 125'). '
'; echo $ moto-> makeymodel (). '
'; ekko 'Brændstofbelastning'. $ motorcykel-> brændstofbelastning (10). '
'; ekko 'Aktuelt brændstof'. $ moto-> resterende brændstof (). ' liter
'; ekko 'Advances motorcykelkøretøj
'; $ moto-> advanceVehicle (); echo $ moto-> makeymodel (). ' du har forladt '. $ moto-> fuelrestaining ().' liter brændstof
'; ?> var13 ->
Vi kunne inkorporere de nødvendige beregninger for at gøre brændstofforbruget mere reelt i henhold til køretøjet.
Fordelen ved at bruge polymorfisme er, at vi kan oprette lignende metoder, men f.eks. Med forskellige parametre.
Implementering af grænseflader med pHp
Grænseflader er erklæringer, der definerer, hvilke metoder der kan implementeres af en klasse, og skjuler, hvordan disse metoder bruges eller administreres. De metoder, der erklæres i en grænseflade, skal være offentlige for at få adgang til de klasser, vi implementerer. De tillader en indkapsling af klasser og polymorfier.
For at implementere en grænseflade med php bruges søgeordsimplementerne. Hvis vi har flere metoder erklæret i en grænseflade, skal de implementeres i en klasse. Klasser kan implementere mere end én grænseflade for at få adgang til forskellige metoder, så vi kan have forskellige funktioner i forskellige klasser.
Vi ser et eksempel på grænseflader
Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt