12 ужасных недостатков PHP

К основным нареканиям к PHP со стороны разработчиков можно отнести:

Мучения с переключением

Наиболее весомой проблемой при создании PHP кода является необходимость помнить, когда набирается HTML, а когда вводится PHP код. Их смешение является выигрышным моментом PHP, но злоупотребление им порождает тяготы. Если смотреть на файл с кодом, то бывает тяжело найти тег, переключающий от написания HTML к созданию серверных инструкций. Словно два файла, работающие на разных уровнях, перемешали в одну беспорядочную кучу. Надлежит помнить о тегах, объединяющих код с разметкой, за исключением случаев, когда они усиливают путаницу.

Дебри разметки

Смешение серверных инструкций с браузерной разметкой является ошибкой. В царстве Java строго соблюдается парадигма модель-представление-контроллер или MVC. Модель для данных помещается в один файл, инструкции макета, управляющие представлением, размещаются во втором наборе файлов, а логика контроллера уходит в третий. Их разделение обеспечивает упорядоченность. Но в сфере PHP основное проектное решение заключается в смешении разметки HTML с серверной логикой контроллера. Безусловно, их можно разделить, но как только начинаешь поступать так, встает вопрос, зачем же тогда использовать PHP.

Противоречивые и своеобразные наименования

Когда надлежит использовать подчеркивания? Метод base64_encode содержит подчеркивание, а urlencode - нет. Имя php_uname содержит подчеркивание, а phpversion нет. Задумывались ли вы, почему так? Редактировали ли API?

Между тем, функция strcmp чувствительна к регистру, а strcasecmp нет. strpos чувствительна к регистру, а stripos нет. Обозначает ли буква i нечувствительность к регистру или нет? Сложно понять.

Адская сортировка

Сколько функций сортировки действительно нужно? В Java есть одна базовая функция сортировки и простой интерфейс для всех объектов. При желании можно добавить другой алгоритм, но большинство довольствуется стандартной функцией. В PHP имеется длинный перечень функций для сортировки: usort, sort, uksort, array_sort. Лишь часть из них с подчеркиванием. Так что приступайте к их изучению и подготовьте шпаргалку.

Бесплатное программное обеспечение имеет свои пределы

PHP является бесплатным, но такие полезные возможности, как кеширование, платные. Это всего лишь проявление реальности. Zend нужно зарабатывать деньги, и он поддерживает весь функционал PHP, продавая лучшие версии людям, нуждающимся в нем. Жаловаться на это бессмысленно. PHP вовсе не является единой большой общиной разработчиков свободного ПО.

Нарушенные пространства имен

Если желаете создавать собственные функции, сначала решите, будете ли использовать PHP 5.3 или более поздней версии, потому что только в ней появились пространства имен. Если нет, убедитесь, что ваши функции не вступят в конфликт с библиотекой, потому что в былые времена все было глобальным. Если будете использовать PHP 5.3 и пространства имен, привыкайте к обратным слэшам – весьма неприятным знакам препинания.

Безопасность типов нарушается

Резко нарушается. PHP программисты любят отмечать, что следующее выражение истинно: 

 (string)"false" == (int)0

Это не один из классических примеров, являющихся побочным эффектом возможности. В JavaScript есть масса подобных примеров, обусловленных преобразованием типов. Указанная строка кода гласит, что выражение слева является строкой, а выражение справа – целым числом. Но они почему-то равны.

Слишком много вариантов, излишняя избыточность

Существует слишком много вариантов выполнения одних и тех же задач. Комментарии в конце строки обозначаются знаком решетки или двойной косой чертой. И float, и double обозначают одно и то же. Простота отбрасывается, потому что разные люди попутно добавляли в язык разные мелкие возможности, не устраняя противоречия.

Странные соглашения об именах переменных

Знак доллара в начале сбивает с толку. Наверное, целесообразно заставить все переменные начинаться с знака доллара, потому что это упрощает их вставку в шаблоны, но разве константы не должны тоже начинаться с знака доллара?

Проблемы с процессорами

Наблюдаются численные проблемы с большими целыми числами на 32-битных машинах. Они обертываются, но 64-битные компьютеры так не поступают, то есть код выполняется по-разному на разных машинах. При тестировании кода на домашнем компьютере все может работать безупречно. Но перенесенный на сервер код может выдать ошибку, которую не удастся воспроизвести на домашнем компьютере. Радует лишь то, что 32-битные машины потихоньку исчезают.

SQL инъекции

Несправедливо обвинять PHP в одной из опаснейших уязвимостей. Другие языки тоже страдают от нее. Просто в PHP слишком легко отправить данные из формы в MySQL. Среднестатистический новичок мог бы допустить такую же ошибку на любом языке, PHP излишне упрощает дело.

Масса несовместимых изменений

Существуют изрядные различия между версиями. Совместимости нет. Такие языки, как Java и JavaScript, пожертвовали быстрым развитием ради обратной совместимости. Часто старый код нормально выполняется на новых машинах, но не в случае PHP. Его разные версии резко отличаются. Остается только надеяться, что на сервере установлена нужная версия, потому что это станет заметно, лишь если начнут появляться странные ошибки. Когда сервер выходит из строя, первым делом проверьте, обновили ли PHP.