<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title> :: komentarze do wpisu &quot;Traits w PHP&quot;</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Wed, 10 Mar 2010 10:42:52 +0100</lastBuildDate><generator>JoggerPL</generator><item><title>MySZ</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093179</link><description>Trochę inaczej to wygląda, gdy używasz dokładnie tak samo działającej metody w różnych klasach. W Twoim przykładzie one się różnią (dla różnych klas jest tworzony obiekt SearchEngine z innymi parametrami), pomijając tutaj każdorazowe tworzenie obiektu przy każdym żądaniu szukiwajki - składam to na karb oszczędności w pisaniu :)A co jeśli masz w różnych klasach dać dokładnie tą samą funkcję, działającą tak samo etc?Wtedy pisanie:class A {  function search () {    return new SearchEngine ();  }}class B {  function search () {    return new SearchEngine ();  }}Jest nadmiarowością. Powtarzasz kod. Jeszcze gorzej, gdy powinna być tam jakaś konfiguracja etc, która zawsze będzie taka sama. OK, da się to obejść - tworzysz jeszcze jedną funkcję, która robi co trzeba z konfiguracją SearchEngine i zwraca obiekt, a w A::search () wywołujesz tąże funkcję etc etc...Natomiast Traitsy pozwalają na uproszczenie, ułatwienie zapisu:trait search {  function search () {    return new SearchEngine ();  }}class A {  use search;}class B {  use search;}IMO ma to sens.</description><pubDate>Fri, 22 Feb 2008 18:02:16 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093179</guid></item><item><title>mwd</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093251</link><description>@MySZ:&quot;A co jeśli masz w różnych klasach dać dokładnie tą samą funkcję, działającą tak samo etc?&quot;Wyciągasz klasę nadrzędną, a te dwie różne implementujesz jako specjalizacja.</description><pubDate>Fri, 22 Feb 2008 20:03:26 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093251</guid></item><item><title>MySZ</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093297</link><description>@mwd: to jest dobre tylko przy prostych przypadkach. Owszem, zawsze da się zastosować jakąś _kombinację_, ale to zawsze będzie jakaś nadmiarowość, której wielodziedziczenie, czy też wersja proponowana tutaj (traitsy) pozwalają uniknąć.</description><pubDate>Fri, 22 Feb 2008 20:52:25 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093297</guid></item><item><title>str()</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093439</link><description>MySZ, jeśli w ogóle nie ma różnic, to po co implementować tą metodę wewnątrz klasy? Lepiej wówczas delegować ją do oddzielnej klasy, bo jej związek z przedmiotową klasą jest i tak dość luźny.mwd, nie możesz wyciągnąć wspólnej klasy bazowej, bo mówimy tu o klasach z różnych przodków. Nie ma tego w powyższych przykładach, ale takie jest założenie i cel Traitsów.</description><pubDate>Fri, 22 Feb 2008 23:46:02 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093439</guid></item><item><title>MySZ</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093449</link><description>@str(): &quot;MySZ, jeśli w ogóle nie ma różnic, to po co implementować tą metodę wewnątrz klasy?&quot;Dla zachowania czytelności interfejsu. Razi mnie np pythonowe len() - imo poszczególne struktury powinny mieć metodę .len() zamiast stosowania globalnej funkcji.</description><pubDate>Fri, 22 Feb 2008 23:52:56 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1093449</guid></item><item><title>str()</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1094532</link><description>MySZ, ależ czytelność interfejsu jest zachowana właśnie przez jawną deklarację interfejsu. Nie proponuję tu wprowadzania globalnych funkcji, a stworzenie klasy usługowej - w tym przypadku wyszukiwarki. Ponadto osobna klasa przyda się, jeśli chcesz w niej mieć więcej niż jedną metodę.Co do Twojej uwagi w pierwszym komencie o tworzeniu dodatkowej instancji - obiekty w PHP są *cholernie* szybkie, prawie tak szybkie jak prymitywy, a na pewno szybsze niż tablice. Nie oszczędzam czasu procesora - on jest tani, oszczendzam za to czas swój i koderów, którzy w przyszłości będą korzystać/rozbudowywać program. Czas programisty jest bardzo drogi (czego wszystkim życzę ;-)</description><pubDate>Sun, 24 Feb 2008 14:48:07 +0100</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1094532</guid></item><item><title>D4rky</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1185201</link><description>&gt; niektórzy developerzy nie odrobili lekcji i gówno wiedzą o interfejsach, kompozycji i delegacji odpowiedzialności do klas usługowychMiałbyś jakieś dobre linki do informacji lub tytuły książek na ten temat? Byłbym wdzięczny, bo gówno wiem :P</description><pubDate>Wed, 11 Jun 2008 00:52:12 +0200</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1185201</guid></item><item><title>stronger</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1189868</link><description>Służę: A. Shallowai, J. Trott - Design Patterns Explained: A New Perspective on Object-Oriented Design (jest też jej polskie tłumaczenie, ale nakład został wyczerpany) - bardzo dobra książka. Ponadto klasyczna pozycja Design Patterns: Elements of Reusable Object-Oriented Software - sprawdź w Wikipedii pod hasłem &quot;Gang_of_four_(software)&quot;. Na koniec jeszcze coś nowszego: M. Fowler - Patterns of Enterprise Application Architecture. Wszystkie godne polecenia, ponadto na www.dofactory.com znajduje się przystępnie rozpisany katalog wzorców.</description><pubDate>Mon, 16 Jun 2008 17:42:26 +0200</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1189868</guid></item><item><title>D4rky</title><link>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1189883</link><description>Dziekowac.</description><pubDate>Mon, 16 Jun 2008 18:09:27 +0200</pubDate><guid>http://stronger.epsi.pl/2008/02/22/traits-w-php/#c1189883</guid></item></channel></rss>