Autor wpisu: batman, dodany: 22.11.2010 18:37, tagi: php
Mimo, iż z zawodu jestem programistą PHP, nie śledzę na bieżąco informacji związanych z planowanymi zmianami w tym języku. Najczęściej dowiadywałem się o nich w momencie wydania pierwszej stabilnej wersji. Związane było to głównie z brakiem czasu i ochoty na przegrzebywanie list dyskusyjnych oraz z przeświadczeniem, iż nie ważne co wymyślą w wersji alfa i tak się ona nie ukaże (PHP6 już od dawna wisiało w repozytorium) lub zmiany w stabilnej wersji będą tak dalekie od pierwszej propozycji, że trzeba będzie je poznawać od nowa. Na szczęście znalazł się “szaleniec”, któremu niestraszne są pehapowe listy dyskusyjne i zaczął na swoim blogu publikować najciekawsze informacje ze wspomnianych list. Wojtek Soczyński, bo o nim mowa, popełnił na początku miesiąca wpis zatytułowany Nowości z php.internals – double colon i 5.4 alpha. Pomijając cześć o T_PAAMAYIM_NEKUDOTAYIM, można się z niego dowiedzieć, że chłopaki od PHP szykują nam PHP 5.4, które będzie zawierać wszystko to, co obiecał nam PHP 6, a nawet więcej.
Początkowo chciałem przeczekać cały ten szum, związany z PHP 5.4 – przecież nie wiadomo czy, a jeśli tak, to kiedy będzie wydany. Nie było mi to jednak dane. Od kilku dni jestem bombardowany z każdej strony informacjami o czymś, co będzie zakałą każdego programisty (nie klepacza) – traits. Angielskojęzyczna blogosfera oszalała na punkcie tej funkcjonalności. Średnio co 5 minut pojawia się na Twitterze nowa wiadomość na ten temat.
“If you can't beat them, join them” głosi stara maksyma i postanowiłem postąpić zgodnie z jej zaleceniem. Przejrzałem jeszcze raz na blogu Wojtka wpisy poświęcone wprowadzanym zmianom oraz zajrzałem do SVN-a (http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup). I co się okazało? Że traits wcale nie są najciekawszą zmianą wprowadzaną do PHP. W mojej opinii the best of PHP 5.4 to:
- Type hint dla typów prostych, czyli:
class Foo { public function bar(int $i) { // some stuff } }
Potrzebna i długo przeze mnie wyczekiwana funkcjonalność pozwalająca na znaczne zredukowanie ilości zbędnego kodu. Obawiam się jedynie o sposób w jaki PHP będzie informował o niepoprawnym typie danych. Oby był to wyjątek. - Możliwość korzystania z $this w closure. Każdy kto korzystał z anonimowych funkcji w zasięgu obiektu, doceni tą drobną, acz niezbędną poprawkę.
- Dostęp do tablicy z poziomu funkcji/metody. Od dawna przeklinałem PHP za brak tej funkcjonalności. W końcu będzie można dostać się do tablicy bezpośrednio z funkcji, np:
echo foo()[2];
- Traits. Ta funkcjonalność jest bardzo potrzeba, jednak spowoduje ogromny burdel w projektach i stanie się przykładem antywzorca tak, jak kiedyś stało się to z “obiektem matką”. Kiedyś, aby uzyskać możliwość korzystania z super-niezbędnych-metod, tworzyło się główny obiekt, po którym dziedziczyły wszystkie klasy w projekcie. Dzięki traits będzie można stworzyć “obiekt rój”, czyli dziesiątki (jeśli nie setki) klas, pakowanych do czegoś, co kiedyś było “matką”. Odnalezienie się w gąszczu zależności będzie graniczyło z cudem. Oczywiście poprawnie wykorzystane, będą dawały potężne możliwości, których czasem brakowało. Funkcjonalność ta wprowadza coś, co można porównać do metod rozszerzeń (w sporym uproszczeniu) znanych z C#.
Nie są to jedyne zmiany jakie przyniesie PHP 5.4, jednak na tych najbardziej mi zależy i na nich w pierwszej kolejności się skupię po wydaniu stabilnej wersji 5.4. Nie pozostaje nic innego jak uzbroić się cierpliwość.