Подтвердить что ты не робот

Каковы специфические для PHP антипаттерны, о которых вы знаете?

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-проект и как вы это делаете?

4b9b3361

Ответ 1

Я не согласен с этим:

  • Не слепо внедрять PHP в HTML - используйте templating/MVC.

PHP - это язык шаблонов. Хотя я согласен с концепцией внедрения MVC, я не понимаю, почему должно быть требование реализовать еще один DSL для создания веб-выхода.

Ответ 2

Добавление закрывающих тегов "? > " в конец php файлов может привести к случайному нажатию белых пробелов в выходной буфер. PHP-интерпретатор автоматически добавит закрывающие теги к файлам, а делать это вручную - это несколько анти-шаблон.

Ответ 3

Моя текущая проблема с домашним животным непоследовательна - возвращаемый тип для функций запроса. Это когда вы вызываете функцию для выполнения запроса и возвращает

  • NULL или FALSE или что-то подобное, когда совпадение не найдено.
  • Соответствующий объект/значение, когда найдено одно совпадение
  • массив совпадающих объектов/значений, когда найдено более одного соответствия

который заставляет вас проверять типы возврата и конкретно обрабатывать каждый случай. Было бы намного проще просто вернуть массив с 0, 1 или n элементами.

Ответ 4

  • Никогда не используйте $_GET или $_POST без проверки и очистки.
  • Узнайте, как правильно настроить php.ini.
  • Никогда не помещайте переменные в исходный SQL.
  • Если вы используете фреймворки, используйте те, у которых меньше зависимостей.
  • Остановить чрезмерное обобщение.
  • Распределите код в файлах php. В большинстве случаев нет необходимости вносить все в один index.php.
  • Уменьшите сложность перед написанием кода.
  • Уважайте, что это веб-приложение. (Попробуйте RESTful.) Это не настольное приложение. Поэтому не ставьте все на $_SESSION.
  • Как минимум одна строка комментариев для каждых 10 строк кода. Вы прочитаете это через год. Я обещаю!
  • Код как девушка - приятно читать.

Ответ 5

Один из моих любимых DON'Ts должен быть:

$query = 'select * from users where username = ' . $_POST['username'];

Может ли быть намного страшнее, чем это?

Ответ 6

Если бы мне пришлось включить фаворита, это не должно быть сообщение, отправленное karim79:

$query = 'select * from users where username = ' . $_POST['username'];

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

Я считаю, что разработчики с других языков, например .NET или Java, заслужили право критиковать язык, если так много разработчиков продолжают программировать. PHP - очень отличный язык, очень гибкий, все еще немного младший, но растет, но многие просто не получают его, все, что им нужно, - это решить старую классическую копию и вставить.

Ответ 7

  • использовать SPL
  • используйте PDO вместо использования mysql_query или pg_query или других.
  • всегда используйте расширение фильтра при вводе пользователя