Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Traits for php

Ostatnio trochę poczytałem na temat traitsów i graftów. Wyczytałem, że traitsy mają wprowadzić do php'a i szczerze mówiąc mam mieszane odczucia - nie wiem czy się cieszyć czy bać.

Przykłady i źródła:
http://wiki.php.net/rfc/traits
http://www.stefan-marr.de/pages/request-for-comments-h...
http://www.stubbles.org/archives/42-Traits-for-PHP.html

Wolałbym nie debugować kodu w którym ktoś używał traitsów jak leci. Co Wy o tym myślicie? Czy widzicie sens używania takich ficzerów?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Traits for php

chlopaki ida ostro w kierunku C++ :P tam mozna tworzyc obiekty uzywane jako traits i jest to imho bardzo przydatne, moj przyklad z zycia:

uniwersalna klasa reprezentujaca Piksel, udostepniajaca jakis tam interfejs, ale polityke obiektu ustawia sie pakujac do niego konkretny trait z typem piksela np: RGB, RGBA itd,
dzieki czemu mozna operowac na danych w rozny sposob ;)

// edit
ale wydaje mi sie ze to mozna bezproblemowo uzyskac w obecnym php ;P wiec ten nowy mechanizm chyba srednio przydatnyŁukasz Cepowski edytował(a) ten post dnia 06.08.10 o godzinie 13:52
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Traits for php

Traitsy są jedną z najlepszych form wielodziedziczenia. Po pierwsze trait może zawierać tylko metody - odpadają konflikty dotyczące pól. Po drugie jeżeli wmiksujemy w klasę dwa traity z identycznymi nazwami metod otrzymamy błąd (można go obejść nadając alias na jakąś metodę). Po trzecie dzięki traitom możemy bardziej logicznie tworzyć drzewo klas, tak jak wynika to z modelowanego problemu, a nie dlatego, że przez koincydencje w dwóch zupełnie niezwiązanych klasach potrzebujemy mieć jakieś wspólne metody.

Prosty przykład:
załóżmy, że mamy dwie klasy np. User i Faktura, są one w zasadzie z zupełnie innych światów, załóżmy teraz, że chcemy sobie obiekty obu klas zapisywać w bazie danych, świadomie pomijając użycie orm-a można to rozwiązać np. tak że stworzyć wspólną klasę która nazywa się np. Record z której dziedziczą obie klasy i która ma metodę save, która zapisuje obiekt w bazie.

Od strony modelowania obiektowego taka hierarchia klas jest bez sensu, co ma Record z bazy danych do Użytkownika czy Faktury i co ma Użytkownik do Faktury (w sensie dziedziczenia)? Natomiast dzięki traitom możemy sobie stworzyć traita z metodą save i wmiksowac go w obie klasy.

Poza tym do traitów można przenieść powtarzający się kod z różnych hierarchii klas, które nie sposób ze sobą "pożenić", ograniczają więc użycie metodologi Copy'iego i Paste'a.

Btw. nie da się tej funkcjonalności w tej chwili uzyskać w aktualnej edycji języka na poziomie klasy, bo na poziomie obiektu jest to możliwe (strategy pattern i komponentyzacja).

Traity są obecne już od dłuższego czasu w innych językach np. Scali. Uważam, że to dobry dodatek do PHP, ale znając życie zawsze znajdzie się kilka osób które go będą nadużywały.

Następna dyskusja:

PHP for Android




Wyślij zaproszenie do