Implementarea claselor și a polimorfismului cu pHp

Cuprins
Polimorfismul este capacitatea unei clase abstracte sau a unui obiect specific de a răspunde la aceeași metodă cu propriul comportament. Polimorfismul specifică faptul că un parametru sau obiecte trecute sau așteptate pot lua mai multe forme și pot avea un comportament diferit cu aceleași metode.
Când efectuăm programare orientată pe obiecte cu polimorfisme, trebuie să avem în vedere că o instanță a unei clase sau a unui obiect poate fi invocată și va funcționa și se va comporta la fel indiferent de clasa căreia îi aparține obiectul. Dacă avem multe clase și obiecte, trebuie să structurăm bine ierarhiile claselor și claselor abstracte. Un alt avantaj este faptul că puteți declara sau programa metode cu același nume, chiar dacă funcționalitatea lor este complet diferită, deoarece ne referim la instanța clasei.
De exemplu, să presupunem o clasă abstractă care reprezintă numărul de vehicule, care împărtășesc în comun unele date nivelul de combustibil, marca și modelul vehiculului.
Proprietățile clasei Vehicule vor fi apoi combustibilul care va conține numărul de litri încărcați în vehicul și marca și modelul vehicul.
 
Mai jos definim metodele comune pentru toate vehiculele care vor încărca combustibil și arătăm cât rămâne în timp ce este folosit, în plus trebuie să putem atribui fiecărui vehicul o marcă și un model și să putem consulta și marca și modelul acestuia . În continuare definim metodele pentru clasa Vehicule.
 combustibil = $ combustibil; } funcție publică show fuel () {return $ this-> fuel; } funcție publică assignvehicle ($ brand, $ model) {$ this-> brandymodel = $ brand. ' '. $ model; } funcție publică showbrandmodel () {return $ this-> markandmodel; }}?> var13 -> 
Apoi vom începe să creăm clasele care moștenesc de la vehicule și vor avea metodele lor particulare, de exemplu, vom crea clasa Cars, va avea proprietatea de a avansa mașina și de fiecare dată când va avansa va consuma un litru de combustibil (astfel încât exercițiul să fie ușor de înțeles)
 clasa Cars extinde Vehicul {avans funcție publică () {// la fiecare 10 kilometri consumă un litru $ acest-> combustibil - = 1; }} // Sfârșitul clasei 
Acum vom implementa o clasă generală pentru șoferul vehiculului, aici luăm în considerare faptul că un șofer sau mai mulți pot conduce vehicule diferite.
În această clasă vom defini un constructor de tip generic sau abstract
 funcție __construct ($ object_parameter) {$ this-> myobject = $ object_parameter} 
Deci, putem manipula apoi orice obiect care este transmis ca parametru al constructorului, astfel încât clasa noastră va avea capacitatea de a primi un obiect ca parametru, acesta este polimorfism, adică poate folosi obiecte complete, de exemplu, putem trimite autovehiculele de clasă ca parametru și utilizează toate metodele lor.
Vom implementa exemplele din php 5, deci este important să ne amintim domeniul de aplicare al unei metode și variabilele, în majoritatea limbilor este foarte similar. Pentru a atribui sau modifica domeniul de aplicare al unei variabile sau proprietăți, trebuie să folosim cuvântul rezervat corespunzător atunci când declarăm variabila sau metoda în funcție de accesul sau domeniul de aplicare pe care dorim să îl aibă:
  • privat: indică faptul că variabila sau metoda poate fi accesată numai prin metodele clasei căreia îi aparține obiectul și nu de la oricare alta.
  • protejat: indică faptul că variabila sau metoda este accesibilă prin metodele și, de asemenea, din oricare dintre subclasele sale care aparțin acestei clase.
  • public: indică faptul că variabilele sau metodele sunt accesibile din orice altă metodă sau indiferent unde aparține sau cui aparține. Aveți grijă cu atributele publice, deoarece acestea ar putea modifica o valoare care este utilizată și de o altă clasă sau altă metodă.

Apoi, creăm clasa Driver, care va avea următoarele metode: încărcați combustibilul, alocați vehiculul, vizualizați marca și modelul, avansați vehiculul și verificați combustibilul rămas pe măsură ce progresează.
 vehicul = $ obiect; } încărcare combustibil funcție publică ($ combustibil) {$ this-> vehicul-> încărcare combustibil ($ combustibil); } funcție publică assignvehicle ($ make, $ model) {$ this-> vehicle-> assignvehicle ($ make, $ model); } funcție publică brandymodel () {return $ this-> vehicle-> showbrandmodel (); } funcție publică advancevehicle () {$ this-> vehicle-> advance (); } funcție publică combustibil rămas () {return $ this-> vehicle-> show fuel (); }}?> var13 -> 
Putem vedea cum în fiecare funcție a clasei Cars instanțăm metodele comune ale clasei Super Vehicule pentru a atribui proprietăți sau metode care sunt particulare și nu comune tuturor vehiculelor.
Să vedem în continuare cum să folosim aceste clase și polimorfismul în sine.
 atribuiți vehiculul („Ferrari”, „550 MARANELLO”). ”
'; // Arătăm vehiculul atribuit echo $ ferrari-> brandymodel (). '
'; // Încărcăm combustibil în vehicul indicând cantitatea în litri ecou „Încărcare combustibil”. $ Ferrari-> încărcare combustibil (50). ”
'; // Afișăm cantitatea actuală de combustibil ecou „Combustibil curent”. $ Ferrari-> combustibil rămas (). ” litri
'; ecou „Vehicul avansat
'; $ ferrari-> advanceVehicle (); echo $ ferrari-> brandymodel (). ' ai '. $ ferrari-> combustibil rămas ().' litri de combustibil
'; // Creăm o altă instanță cu un alt vehicul, de exemplu, putem crea o variabilă care este marca și brevetul $ hondaHB0071 = driver nou (autovehicule noi); echo $ hondaHB0071-> assignvehicle („Honda”, „ACCORD”). ”
'; echo $ hondaHB0071-> makeandmodel (). '
'; ecou „Încărcare combustibil”. $ hondaHB0071-> încărcare combustibil (50). ”
'; ecou „Combustibil curent”. $ hondaHB0071-> combustibil rămas (). ” litri
'; ecou 'Vehicul Honda Advance
'; $ hondaHB0071-> advanceVehicle (); echo $ hondaHB0071-> makeandmodel (). ' aveți '. $ hondaHB0071-> combustibil rămas ().' litri de combustibil
'; ?> var13 ->
Să vedem în continuare adevăratele avantaje ale polimorfismului și moștenirii clasei, să adăugăm clasa la
 // Clasa Motociclete Motociclete extinde Vehicul {avans funcție publică () {// la fiecare 10 kilometri consumă un litru $ acest-> combustibil - = 1; }} $ moto = driver nou (motociclete noi); echo $ moto-> assign vehicle („Yamaha”, „YBR 125”). ”
'; echo $ moto-> makeymodel (). '
'; ecou „Încărcare combustibil”. $ motocicletă-> încărcare combustibil (10). ”
'; ecou „Combustibil curent”. $ moto-> combustibil rămas (). ” litri
'; ecou „Avansează vehiculul cu motocicletă
'; $ moto-> advanceVehicle (); echo $ moto-> makeymodel (). ' ai plecat '. $ moto-> fuelremaining ().' litri de combustibil
'; ?> var13 ->

Aici putem vedea cum am reușit să implementăm o extensie a aceleiași clase prin polimorfism reutilizarea clasei părinte Vehicule și metodele și proprietățile pe care le au în comun o mașină și o motocicletă, deși se comportă diferit, în acest caz putem vedea că capacitatea de combustibil este diferită.
Am putea încorpora calculele necesare pentru a face consumul de combustibil mai real în funcție de vehicul.
Avantajul utilizării polimorfismului este că putem crea metode similare, dar cu parametri diferiți, de exemplu.
Implementarea interfețelor cu pHp
Interfețele sunt declarații care definesc ce metode pot fi implementate de o clasă, ascunzând modul în care aceste metode sunt utilizate sau gestionate. Metodele care sunt declarate într-o interfață trebuie să fie publice, pentru a fi accesate de clasele pe care le implementăm. Permit o încapsulare a claselor și polimorfismelor.
Pentru a implementa o interfață cu php, este utilizat cuvântul cheie implement. Dacă avem mai multe metode declarate într-o interfață, acestea trebuie implementate într-o clasă. Clasele pot implementa mai multe interfețe pentru a putea accesa diferite metode, astfel încât să putem avea funcționalități diferite în clase diferite.
Vedem un exemplu de interfețe
 
V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave