Trasaturi de învățare

traducere liberă din articolele engleză Coder pe site-ul cod.

PHP dobândește toate caracteristicile noi și să corecteze treptat greșelile sale din trecut. În PHP 5.4 una dintre cele mai importante inovații sunt Trăsăturile (trasaturi). PHP în orice moment acceptate doar o singură moștenire de clase, și anume, Fiecare clasă poate avea doar un singur părinte, care, în practică, este uneori rău pentru codul de organizare și ar putea duce la dublarea.

Limbaje cum ar fi C ++ sau Python rezolva această problemă, permițând moștenire din mai multe clase (multinasledovaniya). Ruby folosește pentru această impuritate (Mixins). Indiferent de problema, o tehnica este aceeași. Trasaturi sunt un alt mod de a rezolva această problemă, și sunt utilizate, de exemplu, în limbi, cum ar fi Perl, Scala.

PHP, și moștenirea multiplă

Motivul principal pentru care PHP nebylo moștenire multiplă este o problemă „diez“ (problema diamant), care are loc la un anumit multinasledovani. „Problema este un diez“ - este ambiguitatea care apare atunci când multinasledovaniii.

Aici este un exemplu. Clasele B și C moștenesc din clasa A și clasa D moștenește odnovmeremenno B și C. Clasa A este o metodă care este suprascrisă în ambele B și clasele C, dar nu este suprascrisă în clasa D. Ce metodă ar trebui să moștenească de la clasa D?

Să presupunem că PHP are moștenire multiplă (de fapt, nu), atunci „problema rombului“, în exemplele noastre, va fi ceva de genul: clasă nu va ști ce metodă Roar () moștenim.

Este, de fapt, multinasledovaniya problemă și PHP, din fericire (sau poate invers), acceptă numai moștenire unică și nu poate crea o astfel de greșeală. Dar, cu PHP versiunea 5.4, încă va fi în măsură să pună în aplicare o astfel de funcționalitate.

Caracteristici Trăsăturile

Trasaturi - un mecanism de reutilizare de cod în limbi unice moștenire (cum ar fi PHP). Trasaturi scuti dezvoltator de unele constrângeri unice de moștenire, ceea ce permite utilizarea unui set de metode independente în diferite clase. php.net.

Cel mai simplu mod de a înțelege Trasaturi: cred că de ei ca interfețele cu metodele de punere în aplicare. Așa cum am spus, a făcut parte dintr-o singură moștenire OOP în PHP timp de mai mulți ani, și mulți dezvoltatori au fost dezamăgit de faptul că o parte atunci când încearcă să scrie cod curat pentru un proiect major.

Cu Trasaturi putem folosi funcționalitatea altor clase (aprox. Trans. De fapt, nu clase, și anume) și, astfel, trasaturi nu ar trebui să-i moștenească. Se pare ca multinasledovanie, dar de fapt sunt mai mult ca Trăsăturile „reutilizarea orizontală a codului“, că în timp ce moștenire este o „reutilizarea verticală a codului.“

Așa cum am spus mai devreme, cum ar fi Trăsăturile clasa abstractă, de exemplu, nu puteți crea un obiect direct din trasatura. Să ne uităm la un exemplu:

Dacă crezi că ai putea face aceeași moștenire unică prin crearea unei clase pisică, care moștenește de la animale, și apoi moștenesc de la Tiger Cat, apoi încercați următoarele:

Se răcește, nu? Încercați să facă același lucru, fără multinasledovaniya.

Cel mai bun în trăsătură - este structurarea lor. Cat si BigCat au multe în comun (aceeași pisică, dar mai mare), dar este foarte convenabil să împartă metode pentru diferite trăsătură și de a le folosi după cum este necesar. De fapt, am putea merge chiar mai departe: