Ответ на статью PHP Sucks! But I Like It!
Ответ на некоторые тезисы статьи PHP Sucks! But I Like It!
No Debugger - PHP has xdebug which works quite well as an interactive debugger.
Что значит interactive debugger? Неужели xdebug поддерживает точки останова и списки наблюдения за переменными? Если нет, тогда чем он интерактивен?
Как я заметил, xdebug генерирует трассировку стека к ошибкам, разукрашивает вывод var_dump и профилирует код. А вот точки останова можно расставить, например, в Zend Studio (за деньги).
Lack Of Threading - This is true, butheshe lists it as a difficulty, and I list it as a positive, since the application lifecycle is per request.
Для простенького текстового препроцессора (коим PHP и является) отсутствие потоков — это норма. Но когда нужно, например, что-нибудь вытащить из интернета, делать это последовательно — очень плохо: текущит поток тупо блокируется и бездействует.
Жизненный цикл приложения соответствует запросу — это скорее баг, чем фича. Вспоминается статья «PHP создан, чтобы умирать».
== Is Useless - Actually, it's quite useful, if used appropriately. I do admit that I use it less and less as time goes on, but when you need it, it's quite useful...
Я просто переведу это.
«== бесполезен» — на самом деле он довольно полезен, если правильно пользоваться. Я заметил, что пользуюсь им всё реже, но когда он нужен, он довольно полезен.
Scoping Issues with Globals -HeShe lists this as an oddity. Honestly, it's one of the things that I think PHP got right over almost every other language. Without seeing a global $var declaration in a block, you know the variable is local. So by looking at a function declaration, you can immediately know what external state is needed without having to examine or trace every variable (or have your IDE do it for you).
Ну да, если переменная не перечислена после оператора global, значит, она локальная. Стоит отнести это к косяку с невозможностью объявления переменных.
Constants Are Defined By A Function Call - This is true, but it completely ignores the `const FOO = "bar";` syntax, which is also perfectly valid and not a function call.
Этот синтаксис пришёл из объектной части языка. В документации об этом ничего не сказано.
Static Variables Inside Instance Methods are Global - This is true, because that's exactly what a static variable is supposed to be. It's just like using a variable in Python using `obj.__class__.varname`...
Статическое поле — это поле класса, а не объекта, всё верно. Тут, видимо, автор «фрактала» ошиблась.
HTTP is a first-class citizen. No other popular language provides this. Not Python, not Ruby, not C, not JavaScript. PHP has HTTP interaction baked right in. You may argue that it's sub-optimal, but it's first class. You don't need a library or a framework to talk HTTP.
Я бы сказал, что PHP слишком топорно привязан к HTTP. Это создаёт проблемы с безопасностью. Например, я бы запретил просто так брать и писать строки в сокет (отдавать клиенту). Это нужно делать с явным заданием MIME-типа для строки и сравнением его с типом всего содержимого. Тогда все проблемы с выводом HTML-мнемоник в JSON или выводом XSS в HTML просто растворились бы.
Application lifecycle is per-request. This is actually one of the negatives identified by the original post. Every request boots up PHP anew (well, not PHP, but your PHP application). This is a good thing, because (quoting Rasmus Lerdorf, creator of PHP, in an interview) "The shared-nothing architecture of PHP ... leads to infinite horizontal scalability in the language itself." That means that transitioning from a single server to multiple after the application is deployed is trivial. The only constraints are ones that the programmer put in artificially. Languages that use shared state natively (like Python, Ruby, JavaScript - NodeJS, etc - and Java) must be written to not use that shared state that's provided for this to work.
На самом деле при масштабировании одного скрипта на несколько серверов основная проблема — в распределении БД. Если язык может что-нибудь держать в памяти между обращениями, программист не обязан сразу же делать скрипт немасштабируемым. Но если не может — страдай.
Absolutely gigantic user base. Sure, other languages have large followings, but few are as large as PHP. And I personally think that this is one of the best parts of it. There is a boat load of knowledge out there about how to scale PHP, and how to solve almost any problem. If you know what you're doing, finding the answers is actually really easy.
Это очень важно для новичков (сообщество PHP-программистов состоит из них чуть менее, чем полностью). Если же человек освоил технологию, он сам может решить свои вопросы. Потому что он знает, как это работает и почему.
Также бывают ситуации, когда в сообществе присутствует один из разработчиков платформы. Например, на Stack Overflow можно встретить Romain Guy — одного из разработчиков Android. Я бы не променял его ответы на ответы многомиллионного сообщества.