PHP как инструмент Blunt
Я слышал, что в последнее время PHP часто сталкивается с проблемой. В целом ряде проектов я видел безумные базы php-кода - так плохо, что вы действительно задаетесь вопросом, был ли человек на галлюциногенных препаратах, когда они написали код. Иногда мне интересно, какой код был бы, если бы у начальных разработчиков было немного больше указаний относительно того, что не делать.
Тем не менее, я также видел некоторые очень хорошо организованные проекты PHP, которые были выполнены в 100% ООП, и мне было приятно поддерживать их, но они не были написаны "программистами PHP".Я даю всем нашим младшим разработчикам ссылку на Java Anti-Patterns. Одна из приятных особенностей этой страницы - примеры, специфичные для Java, потому что есть много особенностей Java, которые поддаются общим ошибкам. Я надеялся найти аналогичный список для php, но поиск в Google не показал ничего значимого.
Есть несколько вопросов, которые уже существуют для того, что разработчик должен знать при программировании PHP, но я хотел сосредоточиться на негативе.
Каковы общие вещи, которые вы видели на PHP, которых следует избегать, и что является общим решением для того, чтобы сделать то же самое лучше?
Некоторые из очевидных примеров для меня, о которых я думаю, будут упомянуты, но не являются специфичными для PHP:
- Не объединяйте SQL. Используйте инструкции подготовки или правильное экранирование.
- Не слепо внедрять PHP в HTML - используйте templating/MVC.
- Не слепо отправлять исходный нефильтрованный ввод пользователя - счистите его для атак XSS.
- Не пытайтесь вручную анализировать все ваши POST и GET - используйте веб-фреймворк.
Вот некоторые примеры, которые я бы рассмотрел отдельно от PHP:
- Не нужно, чтобы слишком много слоев файла включали/требовали ссылки и пытались избежать условной привязки. Скорее, иметь разумное соглашение об именах и быть совместимым с вашей организацией.
- Не используйте PHP API исходных баз данных, если вы не можете помочь, вместо этого используйте инфраструктуру базы данных, например ADODB.
- Не злоупотребляйте динамической типизацией PHP, устанавливая переменную в строку в одном месте и логически где-то в другом месте, а затем ожидая, что логические тесты будут иметь смысл.
Итак, каков ваш любимый PHP-проект и как вы это делаете?