Haters gonna hate!
Zupełnie nie wiem dlaczego, ale wygląda na to, że PHP jest ulubionym tematem haterów-programistów. OK, nie jest idealnym językiem, ma swoje wady i absurdy. Nawet całkiem sporo. Nie ma co ukrywać. Ale jak wiemy haterów ci u nas dostatek i dziś wpadł mi w ręce pewien przydługi artykuł na którym to smutny programista wypisuje jakie to PHP jest be i w ogóle. OK, czasami ma rację, lecz częściej albo mija się z prawdą albo podaje tak absurdalne przykłady, że głowa boli. Oto subiektywne 'the best of':
- "There is no threading support whatsoever.". Przepraszam bardzo, ale po co PHP wielowątkowość. PHP nie musi być wielowątkowe, bo PHP służy do dynamicznego generowania stron WWW. Just like that. Jeden request, jeden wątek PHP i starczy. Nie trzeba więcej. Na prawdę;
"==converts to numbers when possible (123 == "123foo"… although"123" != "123foo")". Nie... rzutowanie występuje tylko w przypadku kiedy jeden z argumentów jest typem liczbowym. A nie kiedy to tylko jest możliwe;- "There is no way to declare a variable.". A za przeproszeniem $foo = null; to niby co to jest?;
- "Global variables need a
globaldeclaration before they can be used.". I bardzo dobrze. Na prawdę nie rozumiem po co do funkcji importować domyślnie WSZYSTKIE zmiennie zainicjowane poza innymi funkcjami; - "There are no references. What PHP calls references are really aliases;". A co to niby za różnica, skoro działa? Hatujemy dla zasady?;
- "Try it: not only does
var_dump(int)not work,". A niby czemu miało by działać? I do czego miało służyć? Jak sama nazwa wskazuje var_dump zrzuca dane o zmiennej/obiekcie. Tylko tyle i aż tyle; - "Appending to an array is done with
$foo[] = $bar." One more time: no i co z tego? Składnia jak każda inna. Bardzo wygodne rozwiązanie, brakuje mi tego w pythonie; - "PHP errors and PHP exceptions are completely different beasts. They don’t seem to interact at all.". OK, tutaj się zgodzę, to się twórcom PHP nie udało. Jednak prosty kawałek kodu naprawia tą niedogodność;
- "Classes have something like variable declaration (
varandconst) for class attributes, whereas the procedural part of the language does not." Może się nie znam, ale to chyba dobrze, że język się rozwija. Tyle tylko, że autor chyba nie doczytał, że nie ma var const (no dobra, jest ale PHP 4) tylko trochę inna składnia; - "Classes are not objects." Dokładnie. Klasa to klasa, a obiekt to obiekt danej klasy;
- "Object attributes are
$obj->foo, but class attributes areClass::$foo. ($obj::$foowill try to stringify$objand use it as a class name.)" Uhum... -> do obiektów, :: do właściwości/metod statycznych. Konstrukcja językowa jak każda inna; - "
new,private,public,protected,static, etc." i programistycznemu bogu dzięki, że są; - "PHP has first-class support for “abstract classes”, which are classes that cannot be instantiated. Code in similar languages achieves this by throwing an exception in the constructor." No nie... kolega chyba zapomniał, że to nie to samo. Wyjątkiem w konstruktorze to ja mogę rzucać. Ale jedno słówko załatwią tą sprawę czyściej i prościej;
- "Subclasses cannot override private methods. Subclass overrides of public methods can’t even see, let alone call, the superclass’s private methods. Problematic for, say, test mocks." bo od tego są metody chronione, a nie prywatne... eh...;
- "There are no constructors or destructors.
__constructis an initializer, like Python’s__init__. There is no method you can call on a class to allocate memory and create an object." to niby jak udało się w PHP zaimplementować singletona? Czary jakieś, czy co?; - "There is no overloading for equality or ordering." wow... aż pójdę sobie zrobić co złego z powodu straty;
- "Static variables inside instance methods are global; they share the same value across all instances of the class." Dokładnie. Do tego w końcu służą;
- "Three ways to access a MySQL database:
mysql,mysqli, and thePDOabstraction thing." tak i każda ma swoje wady i zalety. I to od programisty zależy która mu bardziej będzie potrzebna; - "
forkandexecare not built in." jak pisałem wcześnie, po co?; - "Negative indexing doesn’t work, since
-1is just as valid a key as0." no i? No i to, że bardzo dobrze; - "No template system." A takie Smart to niby co? Python nie ma wbudowanej obsługi MySql i jakoś nikt go za to nie hatuje;
- "No authentication or authorization." PHP jest językiem programowania. Nie frameworkiem. Frameworkiem jest choćby Symfony, czy ZendFramework;
- "No interactive debugging." prosz... podstawowe braki wiedzy się kłaniają;
- "
register_globals. It’s been off by default for a while by now, and it’s gone in 5.4. I don’t care. This is anembarrassment." Dokładnie. Nie ma register_globals. Po co komu ustawienie które nie działa bo go nie ma? - "Magic quotes. So close to secure-by-default, and yet so far from understanding the concept at all." Też już nie ma. I też bardzo dobrze;
Dalej jeszcze smutny programista pisze jeszcze coś o bezpieczeństwie, ale chyba też nie do końca wie o czym pisze. To co bracia phpowcy? Może teraz nasza kolej na hatowanie? Od pewnego czasu pracuję z pythonem i już zaczynam zbierać materiał...