Įgyvendinant klases ir polimorfizmą su pHp

Turinys
Polimorfizmas yra abstrakčios klasės ar konkretaus objekto gebėjimas savo elgesiu reaguoti į tą patį metodą. Polimorfizmas nurodo, kad perduotas arba laukiamas parametras ar objektai gali būti įvairių formų ir skirtingai elgtis tais pačiais metodais.
Kai vykdome į objektą orientuotą programavimą su polimorfizmais, turime turėti omenyje, kad galima panaudoti klasės ar objekto egzempliorių ir jis veiks ir elgsis taip pat, nepriklausomai nuo klasės, kuriai objektas priklauso. Jei turime daug klasių ir objektų, turime gerai susisteminti klasių ir abstrakčių klasių hierarchijas. Kitas pranašumas yra galimybė deklaruoti arba užprogramuoti metodus tuo pačiu pavadinimu, nors jų funkcionalumas yra visiškai kitoks, nes mes kalbame apie klasės egzempliorių.
Pavyzdžiui, tarkime abstrakčią klasę, atspindinčią transporto priemonių skaičių, kurie kaip bendri duomenys yra bendri degalų lygis, markė ir transporto priemonės modelis.
Transporto priemonių klasės savybės bus degalai, kuriuose bus į transporto priemonę pakrautų litrų skaičius ir prekės ženklas ir modelis transporto priemonė.
 
Žemiau mes apibrėžiame bendrus visų transporto priemonių, kuriose bus degalai, įkrovos metodus, ir parodysime, kiek jų liko sunaudota, be to, turime sugebėti kiekvienai transporto priemonei priskirti markę ir modelį, taip pat sužinoti jos markę ir modelį. . Toliau apibrėžiame transporto priemonių klasės metodus.
 kuras = $ kuras; } viešoji funkcija rodyti kurą () {return $ this-> kuras; } viešoji funkcija priskirti transporto priemonę ($ prekės ženklas, $ modelis) {$ this-> brandymodel = $ brand. ' $ $ modelis; } viešoji funkcija showbrandmodel () {return $ this-> markandmodel; }}?> var13 -> 
Tada mes pradėsime kurti klases, kurios paveldės iš transporto priemonių, ir jos turės tam tikrus metodus, pavyzdžiui, mes sukursime klasę „Automobiliai“, ji turės savybę išstumti automobilį ir kiekvieną kartą į priekį sunaudos litrą degalų. (kad pratimas būtų lengvai suprantamas)
 klasės automobiliai pratęsia Transporto priemonė {public function avansas () {// kas 10 kilometrų sunaudoja litrą $ this-> kuro - = 1; }} // Baigti klasę 
Dabar įgyvendinsime bendrą transporto priemonės vairuotojo klasę, čia atsižvelgiame į tai, kad vienas ar keli vairuotojai gali vairuoti skirtingas transporto priemones.
Šioje klasėje apibrėšime generinį ar abstraktaus tipo konstruktorių
 funkcija __construct ($ object_parameter) {$ this-> myobject = $ object_parameter} 
Taigi mes galime manipuliuoti bet kokiu objektu, kuris perduodamas kaip konstruktoriaus parametras, todėl mūsų klasė turės galimybę priimti objektą kaip parametrą, tai yra polimorfizmas, tai yra, jis gali naudoti pilnus objektus, pavyzdžiui, galime siųsti klasę autos kaip parametrą ir naudoja visus jų metodus.
Mes įgyvendinsime php 5 pavyzdžius, todėl svarbu prisiminti metodo apimtį ir kintamuosius, daugelyje kalbų jis yra labai panašus. Norėdami priskirti ar pakeisti kintamojo ar ypatybės apimtį, turime naudoti atitinkamą rezervuotą žodį, kai deklaruojame kintamąjį ar metodą pagal prieigą ar apimtį, kurią norime turėti:
  • privatus: rodo, kad kintamąjį ar metodą galima pasiekti tik tos klasės, kuriai priklauso objektas, metodais, o ne iš kitų.
  • apsaugotas: reiškia, kad kintamasis ar metodas yra prieinami naudojant metodus, taip pat iš bet kurio iš jo klasių, priklausančių šiai klasei.
  • viešas: reiškia, kad kintamieji ar metodai yra prieinami iš bet kurio kito metodo arba nepriklausomai nuo to, kur jis priklauso ar kam jis priklauso. Būkite atsargūs su viešaisiais atributais, nes jie gali pakeisti vertę, kurią taip pat naudoja kita klasė ar kitas metodas.

Toliau sukuriame vairuotojo klasę, kurioje bus naudojami šie būdai: pakrauti degalus, priskirti transporto priemonę, peržiūrėti markę ir modelį, paleisti transporto priemonę ir patikrinti, kaip ji eina.
 transporto priemonė = $ objektas; } viešosios funkcijos degalų apkrova ($ kuro) {$ this-> transporto priemonė-> degalų apkrova ($ kuro); } viešoji funkcija priskirti transporto priemonę ($ mark, $ model) {$ this-> vehicle-> assignvehicle ($ mark, $ model); } viešosios funkcijos brandymodel () {return $ this-> transporto priemonė-> showbrandmodel (); } viešosios funkcijos išankstinė transporto priemonė () {$ this-> transporto priemonė-> avansas (); } viešosios funkcijos degalų likutis () {return $ this-> transporto priemonė-> rodyti degalus (); }}?> var13 -> 
Matome, kaip kiekvienoje „Cars“ klasės funkcijoje mes pateikiame įprastus „Super Vehicles“ klasės metodus, kad priskirtume ypatybes ar būdus, būdingus ne visoms transporto priemonėms.
Toliau pažiūrėkime, kaip naudoti šias klases ir patį polimorfizmą.
 priskirti transporto priemonę („Ferrari“, „550 MARANELLO“). “
“; // Rodome priskirtą transporto priemonę echo $ ferrari-> brandymodel (). '
“; // Į transporto priemonę prikrauname degalų, nurodydami kiekį litrais, pakartojantį „Kuro apkrova“. $ Ferrari-> kuro apkrova (50). “
“; // Mes rodome dabartinį degalų kiekio aidą „Dabartinis kuras“. $ Ferrari-> likęs kuras (). ' litrų
“; echo 'Išankstinė transporto priemonė
“; $ ferrari-> avansinis automobilis (); echo $ ferrari-> brandymodel (). “ turite '. $ ferrari-> likusių degalų ().' litrų degalų
“; // Sukuriame kitą egzempliorių su kita transporto priemone, pavyzdžiui, galime sukurti kintamąjį, kuris yra prekės ženklas ir patentas $ hondaHB0071 = new Driver (new Autos); echo $ hondaHB0071-> priskirti transporto priemonę ('Honda', 'ACCORD'). '
“; echo $ hondaHB0071-> makeandmodel (). “
“; echo 'Kuro apkrova'. $ hondaHB0071-> kuro apkrova (50). '
“; echo 'Dabartinis kuras'. $ hondaHB0071-> likęs kuras (). ' litrų
“; „echo“ „Advance Honda“ transporto priemonė
“; $ hondaHB0071-> avansinis automobilis (); echo $ hondaHB0071-> makeandmodel (). “ turite '. $ hondaHB0071-> likęs kuras ().' litrų degalų
“; ?> var13 ->
Toliau pažiūrėkime tikruosius polimorfizmo ir klasių paveldėjimo privalumus, pridėkime klasę prie
 // Motociklų klasė Motociklai pratęsia Transporto priemonė {public function avansas () {// kas 10 kilometrų sunaudoja litrą $ this-> kuro - = 1; }} $ moto = naujas vairuotojas (nauji motociklai); echo $ moto-> priskirti transporto priemonę („Yamaha“, „YBR 125“). “
“; echo $ moto-> makeymodel (). '
“; echo 'Kuro apkrova'. $ motociklas-> kuro apkrova (10). '
“; echo 'Dabartinis kuras'. $ moto-> likęs kuras (). ' litrų
“; echo 'Advances motociklų transporto priemonė
“; $ moto-> avansasAutomobilis (); echo $ moto-> makeymodel (). ' palikote '. $ moto-> fuelremaining ().' litrų degalų
“; ?> var13 ->

Čia galime pamatyti, kaip mes galėjome įgyvendinti tos pačios klasės išplėtimą per polimorfizmą pakartotinai naudojant pirminę klasę Transporto priemonės ir automobiliui bei motociklui būdingi būdai bei savybės, nors jie ir elgiasi skirtingai, šiuo atveju matome, kad degalų talpa skiriasi.
Galėtume įtraukti reikiamus skaičiavimus, kad degalų sąnaudos būtų tikresnės atsižvelgiant į transporto priemonę.
Polimorfizmo naudojimo pranašumas yra tas, kad galime sukurti panašius metodus, tačiau, pavyzdžiui, su skirtingais parametrais.
Sąsajų su pHp diegimas
Sąsajos yra deklaracijos, apibrėžiančios, kokius metodus gali įgyvendinti klasė, slepiant, kaip šie metodai naudojami ar valdomi. Sąsajoje deklaruojami metodai turi būti vieši, kad juos galėtų pasiekti mūsų įgyvendinamos klasės. Jie leidžia apimti klases ir polimorfizmus.
Norėdami įdiegti sąsają su php, naudojamas raktinis žodis implements. Jei sąsajoje turime kelis metodus, jie turi būti įgyvendinti klasėje. Klasės gali įdiegti daugiau nei vieną sąsają, kad galėtų pasiekti skirtingus metodus, kad skirtingose ​​klasėse galėtume turėti skirtingas funkcijas.
Mes matome sąsajų pavyzdį
 
Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave