Inhoudsopgave
Polymorfisme is het vermogen van een abstracte klasse of een specifiek object om op dezelfde methode te reageren met zijn eigen gedrag. Polymorfisme geeft aan dat een doorgegeven of verwachte parameter of objecten meerdere vormen kunnen aannemen en verschillend gedrag kunnen vertonen met dezelfde methoden.Wanneer we objectgeoriënteerd programmeren met polymorfismen uitvoeren, moeten we er rekening mee houden dat een instantie van een klasse of een object kan worden aangeroepen en dat deze hetzelfde zal werken en gedragen, ongeacht de klasse waartoe het object behoort. Als we veel klassen en objecten hebben, moeten we de hiërarchieën van klassen en abstracte klassen goed structureren. Een ander voordeel is dat we methoden met dezelfde naam kunnen declareren of programmeren, ook al is hun functionaliteit compleet anders, omdat we verwijzen naar de instantie van de klasse.
Stel als voorbeeld een abstracte klasse die het aantal voertuigen vertegenwoordigt, die als enkele gegevens het brandstofniveau, het merk en het voertuigmodel gemeen hebben.
De eigenschappen van de klasse Voertuigen zijn dan brandstof die het aantal liters bevat dat in het voertuig wordt geladen en merk en model voertuig.
Hieronder definiëren we de gemeenschappelijke methoden voor alle voertuigen die brandstof zullen laden en laten we zien hoeveel er nog over is zoals het wordt gebruikt, daarnaast moeten we elk voertuig een merk en model kunnen toewijzen en ook het merk en model kunnen raadplegen . Vervolgens definiëren we de methoden voor de klasse Voertuigen.
brandstof = $ brandstof; } publieke functie toon brandstof () {return $ dit-> brandstof; } openbare functie toewijzen voertuig ($ merk, $ model) {$ dit-> brandymodel = $ merk. ' '. $-model; } publieke functie showbrandmodel () {return $ dit-> markandmodel; }}?> var13 ->Dan zullen we beginnen met het creëren van de klassen die erven van voertuigen en ze zullen hun specifieke methoden hebben, we creëren bijvoorbeeld de klasse Auto's, het zal de eigenschap hebben om de auto vooruit te helpen en elke keer dat het vooruitgaat, zal het een liter brandstof verbruiken (zodat de oefening gemakkelijk te begrijpen is)
klasse Auto's verlengt Voertuig {openbare functie voorschot () {// verbruikt elke 10 kilometer een liter $ dit-> brandstof - = 1; }} // Einde KlasseNu zullen we een algemene klasse voor de bestuurder van het voertuig implementeren, hier houden we er rekening mee dat één bestuurder of meerdere verschillende voertuigen kunnen besturen.
In deze klasse zullen we een generiek of abstract type constructor definiëren
functie __construct ($ object_parameter) {$ dit-> mijnobject = $ object_parameter}Dus we kunnen dan elk object manipuleren dat als parameter van de constructor is doorgegeven, zodat onze klasse de mogelijkheid heeft om een object als parameter te ontvangen, dit is polymorfisme, dat wil zeggen, het kan volledige objecten gebruiken, we kunnen bijvoorbeeld verzenden de klasse autos als parameter en gebruik al hun methoden.
We zullen de voorbeelden in php 5 implementeren, dus het is belangrijk om de reikwijdte van een methode en de variabelen te onthouden, in de meeste talen lijkt het erg op elkaar. Om het bereik van een variabele of eigenschap toe te wijzen of te wijzigen, moeten we het overeenkomstige gereserveerde woord gebruiken wanneer we de variabele of methode declareren volgens de toegang of het bereik dat we willen hebben:
- privaat: geeft aan dat de variabele of methode alleen toegankelijk is voor de methoden van de klasse waartoe het object behoort en niet door een andere.
- beschermd: geeft aan dat de variabele of methode toegankelijk is via de methoden van de en ook vanuit een van zijn subklassen die tot deze klasse behoren.
- openbaar: geeft aan dat variabelen of methoden toegankelijk zijn vanaf elke andere methode of ongeacht waar deze thuishoort of aan wie deze toebehoort. Wees voorzichtig met openbare attributen, omdat ze een waarde kunnen wijzigen die ook door een andere klasse of andere methode wordt gebruikt.
Vervolgens maken we de klasse Driver, die de volgende methoden heeft: brandstof laden, voertuig toewijzen, merk en model bekijken, voertuig vooruitbrengen en de resterende brandstof controleren terwijl deze vordert.
voertuig = $ object; } brandstofbelasting publieke functie ($ brandstof) {$ dit-> voertuig-> brandstofbelasting ($ brandstof); } openbare functie assignvehicle ($ merk, $ model) {$ dit-> voertuig-> assignvehicle ($ merk, $ model); } publieke functie brandymodel () {return $ dit-> voertuig-> showbrandmodel (); } openbare functie voorschotvoertuig () {$ dit-> voertuig-> voorschot (); } resterende brandstof voor openbare functie () {return $ dit-> voertuig-> brandstof tonen (); }}?> var13 ->We kunnen zien hoe we in elke functie van de Cars-klasse de gemeenschappelijke methoden van de Super Vehicles-klasse instantiëren om eigenschappen of methoden toe te wijzen die specifiek zijn en niet voor alle voertuigen.
Laten we nu kijken hoe we deze klassen en het polymorfisme zelf kunnen gebruiken.
voertuig toewijzen ('Ferrari', '550 MARANELLO'). 'Laten we nu eens kijken naar de echte voordelen van polymorfisme en klasse-overerving, laten we de klasse toevoegen aan
'; // We tonen het toegewezen voertuig echo $ ferrari-> brandymodel (). '
'; // We laden brandstof in het voertuig met vermelding van de hoeveelheid in liters echo 'Brandstoflading'. $ Ferrari-> brandstoflading (50). '
'; // We tonen de huidige brandstofhoeveelheid echo 'Huidige brandstof'. $ Ferrari-> resterende brandstof (). ' liters
'; echo 'Voertuig vooruit'
'; $ ferrari-> AdvanceVehicle (); echo $ ferrari-> brandymodel (). ' je hebt '. $ ferrari-> resterende brandstof ().' liter brandstof
'; // We maken nog een instantie met een ander voertuig, we kunnen bijvoorbeeld een variabele maken die het merk en patent is $ hondaHB0071 = nieuwe bestuurder (nieuwe auto's); echo $ hondaHB0071-> assignvehicle ('Honda', 'ACCORD'). '
'; echo $ hondaHB0071-> merk en model (). '
'; echo 'Brandstoflading'. $ hondaHB0071-> Brandstoflading (50). '
'; echo 'Huidige brandstof'. $ hondaHB0071-> resterende brandstof (). ' liters
'; echo 'Advance Honda voertuig
'; $ hondaHB0071-> voorschot Voertuig (); echo $ hondaHB0071-> merk en model (). ' je hebt '. $ hondaHB0071-> resterende brandstof ().' liter brandstof
'; ?> var13 ->
// Motorfietsenklasse Motorfietsen verlengt Voertuig {voorschot openbare functie () {// verbruikt elke 10 kilometer een liter $ dit-> brandstof - = 1; }} $ moto = nieuwe bestuurder (nieuwe motorfietsen); echo $ moto-> voertuig toewijzen ('Yamaha', 'YBR 125'). '
'; echo $ moto-> makeymodel (). '
'; echo 'Brandstoflading'. $ motorfiets-> brandstoflading (10). '
'; echo 'Huidige brandstof'. $ moto-> resterende brandstof (). ' liters
'; echo 'Vooruitgang motorvoertuig
'; $ moto-> voorschot Voertuig (); echo $ moto-> makeymodel (). ' je hebt '. $ moto-> resterende brandstof ().' liter brandstof
'; ?> var13 ->
We zouden de nodige berekeningen kunnen opnemen om het brandstofverbruik reëler te maken, afhankelijk van het voertuig.
Het voordeel van het gebruik van polymorfisme is dat we vergelijkbare methoden kunnen maken, maar met bijvoorbeeld verschillende parameters.
Implementatie van interfaces met pHp
Interfaces zijn declaraties die definiëren welke methoden door een klasse kunnen worden geïmplementeerd, waarbij wordt verborgen hoe deze methoden worden gebruikt of beheerd. De methoden die in een interface worden gedeclareerd, moeten openbaar zijn om toegankelijk te zijn voor de klassen die we implementeren. Ze maken een inkapseling van klassen en polymorfismen mogelijk.
Om een interface met php te implementeren, wordt het trefwoord implements gebruikt. Als we verschillende methoden in een interface hebben gedeclareerd, moeten ze in een klasse worden geïmplementeerd. Klassen kunnen meer dan één interface implementeren om toegang te krijgen tot verschillende methoden, zodat we verschillende functionaliteiten in verschillende klassen kunnen hebben.
We zien een voorbeeld van interfaces
Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven