Trasaturi în php, utilizați exemple
Trasaturi sunt utilizate atunci când este necesar să se pună în aplicare o serie de metode generale pentru mai multe clase, nu instanțe de atribuire a unui nou tip de clasă, folosind clase abstracte sau interfețe.
Trasaturi rezolva problema de cod duplicare.
Să ne uităm la un exemplu folosind trasatura.
În acest exemplu, am creat o trasatura someTrait folosind trasatura de cuvinte cheie. Această trăsătură are doar o singură metodă doStuff. Apoi, atunci când creați o clasă someClass am folosit utilizarea de cuvinte cheie pentru a conecta trasatura noastra. În continuare, referindu-se în mod direct la metoda clasei care este inițializată într-o trăsătură, someClass :: doStuff ();. am văzut cum funcționează.
Este important să înțelegem ce Trasaturi nu sunt clasificați la instanțe ale unei clase (obiect) un tip nou.
Ca urmare a unui exemplu arată că clasa nu se potrivește cu tipul de obiect someClass someTrait. Deși această clasă folosește trăsătura specificată.
Nu se poate crea o instanță separată a trăsăturii.
Utilizarea caracteristicilor multiple
Dacă este necesar, puteți utiliza mai multe Trăsăturile în crearea unei singure clase. În acest scop, Însușirile nume fi listate printr-o virgulă după utilizarea cuvântul.
Din acest moment, totul este simplu.
Partajarea Trasaturi, și interfețe
Deci, știm deja că Trăsăturile nu atribuie un nou tip de date. Dar se poate solicita acest tip general de date. Această problemă este rezolvată prin Trasaturi de partajare, și interfețe. Noi definim mai întâi SomeMethod metoda de interfață semnătură. și apoi Trasaturi descrie această metodă. Când creați o clasă, vom implementa interfata simpla prin conectarea la o trăsătură în care este descrisă metoda dorită.
Importate din abordarea trăsătură îndeplinește cerințele interfeței, astfel încât să putem verifica acum clasa de obiecte folosind operatorul instanceof.
nume conflicte în trăsătură, insteadof.
Poate că această situație: două trăsături pe care le conectează la aceeași clasă conține metode cu același nume. Astfel, avem un conflict de nume. Aceste conflicte rezolvate de insteadof cuvinte cheie.
Să considerăm exemplul modul în care funcționează:
Prin utilizarea de cuvinte cheie, am adăugat corpul, care este cuprins intre paranteze. În cadrul acestui organism, am folosit cuvântul cheie insteadof. din stânga care conțin definiția completă a metodei, care constă în numele trăsătură și metoda de nume, care sunt separate printr-un colon dublu. Pe partea dreaptă indică numele trăsăturii, metoda care ar trebui să fie înlocuit.
Pseudonime să fie înlocuită de metoda
Astfel, în ultimul nostru exemplu, o metodă folosim, dar cum putem pune la dispoziție cea de a doua metodă, care este înregistrată în trăsătura otherTrait. Această metodă a fost deja redefinit și se referă la el de nume este imposibil. Prin urmare, pentru a accesa utilizând cuvântul cheie ca. care creează un alias.
Iată cum funcționează:
Dacă atribui numai pseudonime destule conflicte apar nume de metode folosind cuvântul cheie ca. În primul rând, asigurați-vă că pentru a înlocui metoda de utilizare a cuvântului insteadof. Numai atunci folosit ca. deoarece această construcție atribuie un alias de substituie doar metode.
Metode statice în Trasaturi
Nimic nu ne împiedică să declare metode în trăsătură statică. Să ne uităm la un exemplu de trăsătură cu metode statice.
Sunt în exemplul anterior adresat trăsătura metoda direct, fără a crea un obiect. În acest exemplu am singura metodă declarată ca trăsătură statică.
Accesul la proprietățile clasei de baza
Trăsătura de a avea acces la proprietățile clasei de bază, puteți utiliza $ pseudo- acest lucru. Să ne uităm la un exemplu de utilizare a acestuia.
În acest cod, există una, dar un dezavantaj serios. Faptul că nu există nici o garanție că în clasa de bază va fi necesară proprietate $ TaxRate. Garanție disponibilitatea unor astfel de proprietăți pot fi folosind metode abstracte, Însușirile beneficii le sprijine.
Metode abstracte în clase
În cazul în care caracteristica este declarată metodă abstractă, această metodă trebuie să fie puse în aplicare în clasa de bază.
În exemplul următor, garantăm disponibilitatea proprietăților clasei de bază prin declararea unei metode abstracte într-o trăsătură.
În acest exemplu, am creat o getTaxRate clasa getter (). care conține și returnează cota de impozitare. Trăsătura am anunțat getter abstractă, astfel încât clasa de bază este obligată să-l conțină.
Modificarea drepturilor de acces la metodele de trasatura
Este evident că în cadrul trăsătura putem folosi orice orice modificator de acces (public, privat, protejat) metodei. Dar, in afara de aceasta, avem capacitatea de a schimba clasa de acest modificator la altul. Pentru a face acest lucru, utilizați operatorul după cuvintele pe măsură ce se poate specifica un nou modificator.
Aici, în sala de clasă, am schimbat modificatorul de acces la privat, iar acum este imposibil să se aplice această metodă someClass :: SomeMethod (). dar se pot aplica în mod direct la această metodă în trasatura someClass :: SomeMethod ().
Pe scurt despre ceea ce am învățat.
- Trasaturi sunt utilizate atunci când aveți nevoie pentru a introduce un set de metode în clase diferite, ele sunt oarecum similare cu comanda includ.
- Trasaturi nu sunt atribuite acestora, folosind un nou tip de clasa.
- Trasaturi sunt declarate folosind trasatura de cuvinte cheie. clasă utilizare trăsătură prescrisă utilizarea cuvânt-cheie.
- Într-o clasă, puteți folosi mai multe trăsături.
- Nu se poate crea o instanță separată a trăsăturii.
- Trasaturi pot fi utilizate împreună cu interfețele.
- nume intră în conflict Trasaturi eliminate prin insteadof cuvinte cheie. care înlocuiește metoda.
- Înlocuit prin metoda poate fi dat un alias folosind cuvântul cheie ca.
- Prin utilizarea ca un cuvânt cheie, puteți modifica, de asemenea, domeniul de aplicare a metodei din trasatura de clasă.
- Caracteristica poate utiliza $ pseudo- acest lucru pentru a avea acces la proprietăți ale clasei de bază.
- Caracteristica poate fi definit clase abstracte care trebuie să fie puse în aplicare în clase care folosesc aceste trăsături.
- Metodele trasatura pot fi accesate direct, folosind operatorul de colon dublu.