Буквально вчера я прочёл весьма занимательный пост PHP: a fractal of bad design (русский вариант на хабре — прим. перев.). Этот неоднозначный и провокационный топик широко обсуждается всем PHP-сообществом. Честно говоря, там есть как действительно хорошие позиции и замечания, так и откровенные ошибки, не позволяющие увидеть всю картину в целом.
В посте достаточно много ошибок и вообще автор путает божий дар с яичницей. Позвольте мне выделить главные:
В-общем, из всего большого поста, пунктов, которые действительно могут вызвать недовольство, мало. Там написано весьма много, но с таким напыщенным стилем это не очень приятно чтиво.
На самом деле с большинством написанного я соглашусь. PHP – противоречив. Многословен. Там действительно есть примеры неадекватного поведения. У него есть много проблем. Порой он уродлив. Иногда он неуклюж в обиходе. Многое оставляет желать лучшего.
Но в то же время он необычайно мощный. Легко и просто можно написать работающее приложение. Действительно легко создать масштабный проект. Несложно его расширять. И что по-настоящему просто – это получить помощь (в Интернете вас поддержит одно из крупнейших и самых активных программистских сообществ).
Однако, есть одна вещь, которая не добавляет языку популярности: возможность использования не-разработчиками. Просто взгляните вокруг на опен-сорсные веб-проекты и вы поймёте, что PHP – это победа. Я имею в виду весь этот рынок CMS, на котором к PHP конкуренты просто не подберутся и на пушечный выстрел (Wordpress, Joomla!, Drupal, vBulletin, MODx, TYPO и т. д.). Посмотрите на любой сетевой рынок услуг, и PHP будет там доминировать (или просто иметь сильнейшее влияние). Всё дело в том, что развернуть PHP-сайт до смешного просто. Так просто, что даже не-разработчики могут это сделать.
Как говорит Brandon Savage: It's About The Customer (А кто клиент?). И это – тот большой кусок пирога, который был упущен в оригинальном посте. В самом деле, с точки зрения разработчика в PHP чего-то не хватает. Но с каких пор разработчик определяет что успешно? Если бы разработчик это определял, то софт типа Wordpress, jQuery и Jenkins/Hudson не достигли бы такого успеха (ибо их исходные коды под характерным вопросом качества). Но они достигли, потому что решают проблему и решают её хорошо.
Всё дело в том что у PHP есть много преимуществ над другими языками. Вот лишь то, что всплыло у меня в голове:
Этих 4 причин для меня достаточно, чтобы считать PHP моим основным языком. Я знаю и активно применяю Python и серверный JS (node.js в настоящее время), да и знаком ещё с несколькими языками. Но я по прежнему придерживаюсь и буду придерживаться PHP для своих основных проектов, потому что хотя он и не безупречен, он работает…
А ваши мысли?
Небольшие ошибки
В посте достаточно много ошибок и вообще автор путает божий дар с яичницей. Позвольте мне выделить главные:
- Нет отладчика – в PHP есть xdebug, который великолепно работает как интерактивный отладчик.
- Нет поддержки тредов – это так, но он отмечает это за недостаток, когда я нахожу это положительным; потому как жизненный цикл приложения начинается с запроса (я раскрою этот тезис чуть более подробно)
- == бесполезен – да нет, он весьма полезен, если использовать его правильным образом. Да, я соглашусь, что использую его всё меньше и меньше, но когда он вам нужен – он полезен…
- Проблемы видимости с глобальными переменными – он находит в этом нечто диковинное. Честно говоря, по мне это одна из тех вещей, в которых PHP превосходит практически все другие языки. Если вы не видите global $var внутри какого-то блока, вы знаете, что переменная локальная. Поэтому просто посмотрев на декларацию функции, вы немедленно можете оценить, какое должно быть внешнее окружение без отслеживания каждой отдельной переменной (и не просите вашу IDE сделать это для вас).
- Константы определяются с помощью вызова функции – это так, но автор забывает о синтаксисе `const FOO = «bar»;`, который является валидным и не является вызовом функции.
- Статические переменные внутри методов экземпляра глобальны – это правда, потому что это именно то, для чего они предназначены. В Python мы бы использовали `obj.__class__.varname`…
- PHP привязан к Apache – это откровенная чушь: существует куча приложений, которым Apache не нужен. Просто Apache на большинстве платформ по умолчанию конфигурируется с mod_php. Но по мне, настройка nginx+FastCGI гораздо легче, нежели настройка mod_php под Apache.
- Нет простого способа «отделить» PHP-приложение и его зависимости от остальной системы – это неправда, так как есть suphp и FastCGI; это ведь действительно просто запустить несколько различных инстансов PHP, работающих на разных версиях. Да, в самом деле, с mod_php вам придётся разделять инстансы Apache, но есть и другие способы организации сервера, нежели mod_php, так что это не совсем честно – списывать на PHP ограничения Apache.
- Секция особенностей – вот с этого момента я потерялся. Вплоть до этого он говорил об особенностях языка (и с большинством я бы согласился). Но с этого места начинается разговор о библиотеках и фреймворках. Да, в PHP нет системы шаблонов. Но разве есть она в Python или Ruby? В Django и Ruby On Rails есть, а как же тогда Zend и Symfony? В PHP нет XSS-фильтра, но ведь их нет и в Python и Ruby, лишь в фреймворках. PHP не поддерживает роутинг, но разве Python и Ruby поддерживают? Зато есть dev server. И поддержка интерактивного отладчика (xdebug). И такая же ерунда с вопросами безопасности.
В-общем, из всего большого поста, пунктов, которые действительно могут вызвать недовольство, мало. Там написано весьма много, но с таким напыщенным стилем это не очень приятно чтиво.
Мой взгляд
На самом деле с большинством написанного я соглашусь. PHP – противоречив. Многословен. Там действительно есть примеры неадекватного поведения. У него есть много проблем. Порой он уродлив. Иногда он неуклюж в обиходе. Многое оставляет желать лучшего.
Но в то же время он необычайно мощный. Легко и просто можно написать работающее приложение. Действительно легко создать масштабный проект. Несложно его расширять. И что по-настоящему просто – это получить помощь (в Интернете вас поддержит одно из крупнейших и самых активных программистских сообществ).
Однако, есть одна вещь, которая не добавляет языку популярности: возможность использования не-разработчиками. Просто взгляните вокруг на опен-сорсные веб-проекты и вы поймёте, что PHP – это победа. Я имею в виду весь этот рынок CMS, на котором к PHP конкуренты просто не подберутся и на пушечный выстрел (Wordpress, Joomla!, Drupal, vBulletin, MODx, TYPO и т. д.). Посмотрите на любой сетевой рынок услуг, и PHP будет там доминировать (или просто иметь сильнейшее влияние). Всё дело в том, что развернуть PHP-сайт до смешного просто. Так просто, что даже не-разработчики могут это сделать.
Как говорит Brandon Savage: It's About The Customer (А кто клиент?). И это – тот большой кусок пирога, который был упущен в оригинальном посте. В самом деле, с точки зрения разработчика в PHP чего-то не хватает. Но с каких пор разработчик определяет что успешно? Если бы разработчик это определял, то софт типа Wordpress, jQuery и Jenkins/Hudson не достигли бы такого успеха (ибо их исходные коды под характерным вопросом качества). Но они достигли, потому что решают проблему и решают её хорошо.
Всё дело в том что у PHP есть много преимуществ над другими языками. Вот лишь то, что всплыло у меня в голове:
- HTTP – это объект первого класса. Никакие другие популярные языки этого не предоставляют. Ни Python, ни Ruby, ни C, ни JavaScript. В PHP встроена поддержка HTTP на низком уровне. Вы можете поспорить, что это не так оптимально, но это первый класс. Вам не надо никаких библиотек или фреймворков, чтобы говорить на HTTP.
- SAPI — это объект первого класса (Server API, mod_php vs CGI vs FastCGI, etc). Это означает то, что PHP разрабатывался так, чтобы быть за плечами более сильного сервера. Также это означает то что передача кода от CLI к API сервера – тривиальна (надо просто посмотреть, как получаются переменны запроса). Нет никакой необходимости использовать библиотеки или фреймоворки, чтобы взаимодействовать с сервером. WSGI в Python в принципе не зря ест свой хлеб, но по-прежнему вам надо подключить библиотеку для общения с сервером. Это делает PHP весьма простым для построения фундамента web-приложений.
- Цикл жизни приложения от запроса к запросу. В оригинальном посте это было отмечено как негативный аспект. Каждый новый запрос запускает заново PHP (ну, не весь PHP, а ваше PHP приложение) Это хорошая штука, так как (цитата по Rasmus Lerdorf, создатель PHP в интервью) «The shared-nothing architecture of PHP… leads to infinite horizontal scalability in the language itself.» (дословно: «Не позволяющая ничего шарить архитектура PHP … ведёт к бесконечной горизонтальной масштабируемости языка как такового»).
- Просто громадная база пользователей. Да, и у других языков есть куча последователей, но никто и близко не подбирается к PHP. И лично я думаю, что это – наиболее значимый аспект из всех. Это ковчег, полный знаний о том, как расширить PHP и как решить почти любую проблему. Если вы знаете, что вы делаете, то вы всё, что надо, найдёте.
Этих 4 причин для меня достаточно, чтобы считать PHP моим основным языком. Я знаю и активно применяю Python и серверный JS (node.js в настоящее время), да и знаком ещё с несколькими языками. Но я по прежнему придерживаюсь и буду придерживаться PHP для своих основных проектов, потому что хотя он и не безупречен, он работает…
А ваши мысли?