Лучшее понимание сообщений об ошибках может значительно сократить время, затрачиваемое на выявление и исправление неисправности. Поэтому в этой статье я попытаюсь разъяснить множество различных типов сообщений об ошибках PHP и то, как правильно понимать значение различных сообщений об ошибках в процессе разработки.
При компиляции PHP-скрипта компилятор PHP делает все возможное, чтобы сообщить о первой проблеме, с которой он сталкивается. Это создает проблему: PHP может распознать ошибку только тогда, когда она возникает (эта проблема подробно описана далее в этой статье). Именно по этой причине компилятор указывает, что строка с ошибкой может показаться на первый взгляд синтаксически правильной, или это может быть строка, которой вообще не существует!
Содержимое, описанное в этой статье, не имеет никакого отношения к используемой вами версии PHP, поскольку различные ошибки, описанные в этой статье, не ограничиваются конкретными ошибками в конкретной версии. Кроме того, мы предполагаем, что вы являетесь младшим или средним программистом и занимаетесь программированием полгода-год.
Как работает компилятор
Чтобы понять, почему компилятор сообщает об ошибке в определенной строке, вы должны сначала понять механизм, с помощью которого компилятор анализирует код PHP. Я не буду подробно останавливаться на этом в этой статье, но мы обсудим некоторые простые концепции, которые с большей вероятностью приведут к ошибкам.
Объявление переменной.
Если вы объявляете переменную в инструкции, конкретный метод выглядит следующим образом:
$переменная = 'значение';
Компилятор сначала оценивает правую половину оператора (то есть все, что находится справа от знака равенства). В некоторых книгах по программированию это представлено как правая часть (правая половина) оператора. Именно эта часть утверждения часто вызывает ошибки. Если вы используете неправильный синтаксис, вы получите ошибку синтаксического анализа.
анализа
: ошибка анализа, неожиданный T_WHILE в c:program filesapache groupapachehtdocsscript.PHP в строке 19.
Ошибки анализа продолжают появляться одна за другой каждый раз, когда определяется предыдущая ошибка. Поскольку PHP прекращает выполнение сценария после первой ошибки синтаксического анализа, отладка и исправление этой серии ошибок часто может быть особенно утомительным.
Кроме того, ошибки синтаксического анализа содержат очень мало информации, при этом почти не сообщается номер строки, в которой произошла ошибка. Конкретная причина заключается в том, что при возникновении ошибки компилятор определяет, что синтаксис нескольких строк должен считаться допустимым, пока не встретится с недопустимым синтаксисом. Наиболее вероятным случаем является использование в выражении предопределенных слов, например while = 10; ; // Неверно ? while является предопределенным словом и не может быть присвоено значению.
К предопределенным словам относятся while, function и т. д. Если PHP использует использование для оценки вашего кода, вы не можете использовать эти предопределенные слова для именования переменных. при этом PHP будет сообщать о большем количестве ошибок, чего вы не сможете вынести.
Что касается этой проблемы, вам может помочь следующий пример. Пожалуйста, прочитайте код PHP, показанный ниже:
<?PHP
$b = "какое-то значение"
if($b == "некоторое значение"){
напечатать «Привет, мир!»;
}
?>
Ошибка находится в строке «$b=" (отсутствует точка с запятой в конце оператора), поэтому ошибка должна быть «Ошибка анализа: отсутствует точка с запятой в строке 3», верно? Вместо того, чтобы судить по парсеру:
Ошибка синтаксического анализа: ошибка синтаксического анализа, неожиданный T_IF в c:program filesapache
groupapachehtdocsereg2.PHP в строке 4
В строке 4 синтаксис оператора if() правильный. Итак, что же сбивает с толку компилятор? Подсказка — это «неожиданная часть T_IF». Когда возникает ошибка «неожиданная T_???», это означает: компилятор обнаружил, что предопределенное слово появляется в позиции, где оно не должно появляться. T_IF представляет if(), T_WHILE представляет while(), T_FOR представляет for() и т. д.
К счастью, причины некоторых ошибок также просты:
Операторы не завершаются точкой с запятой (;), как в примере выше. В строке отсутствуют кавычки.
Некоторые другие распространенные ошибки
Самая распространенная ошибка, с которой я сталкиваюсь, — это не закрытие функции или цикла с помощью фигурной скобки ( }). Это, пожалуй, самая распространенная и досадная ошибка. Конкретный код выглядит следующим образом:
function UselessFunction() {
for($i <0; $i <10; $i++){
}
Будет сгенерирована следующая ошибка:
Ошибка анализа: ошибка анализа, неожиданный $ в c:program filesapache
groupapachehtdocsereg2.PHP в строке 9
Поскольку функция UselessFunction не заканчивается фигурной скобкой (}), компилятор PHP продолжает искать закрывающую скобку до тех пор, пока она не достигнет конца файла. Поскольку компилятор не находит соответствующую фигурную скобку, он сообщает об ошибке конца файла.
Если иерархия кода отражена правильно, сообщения об ошибках станут очень очевидными. Если не размечена иерархическая структура кода, то узнать, что же в итоге было забыто, будет практически невозможно. Итак, помните, обязательно указывайте иерархию вашего кода. Клавиша Tab упрощает это. Последующим разработчикам также будет легче понять структуру кода и изменить ее.
Ошибка MySQL
Еще одно чрезвычайно раздражающее сообщение об ошибке — это наиболее распространенная ошибка MySQL, которая часто вызывает головную боль у новых пользователей PHP: Внимание: предоставленный аргумент не является допустимым ресурсом результата MySQL в...
Ошибочная строка, указанная выше, может быть следующей:
while($row = MySQL_fetch_array($result)) {
Параметр $result не является допустимым ресурсом. По-английски это означает, что mysql_fetch_array не может быть обработан, поскольку запрос не выполнен. Синтаксис любого запроса недействителен (необходимо скопировать и вставить запрос в ссылку на консоль MySQL для проверки), либо соединение с базой данных не удалось (в этом случае вам следует дважды проверить имя пользователя, пароль и т. д.).
Предотвращение ошибок
В качестве первого шага умные программисты могут предпринять следующие шаги для устранения следующих ошибок:
· Не думайте о добавлении точки с запятой в конце каждого оператора — это должно войти в привычку.
· Всегда указывайте иерархию вашего кода, когда это возможно. Это позволит вам увидеть, не забыли ли вы добавить фигурные скобки в таких местах, как вызовы или в конце функций.
· Используйте редактор с подсветкой синтаксиса (например, HTML-Kit). С помощью такого редактора вы сможете определить, не забыли ли вы поставить кавычку, не пропустили ли точку с запятой и т. д.
Заключение
В этой статье у нас есть определенное понимание некоторых, казалось бы, бессмысленных ошибок, о которых может сообщить компилятор PHP. Нам нужно применять то, чему мы научились, чтобы избежать ошибок и исправить их, когда они происходят. Отладка — одна из наиболее важных частей работы разработчика. Повышение эффективности отладки может значительно ускорить ход всей работы и сократить время, необходимое для завершения проекта. Это также может значительно снизить психологическое напряжение, вызванное сбоем кода.
Как бы тщательно мы ни были при написании программ, ошибки неизбежны. Эти ошибки обычно сбивают с толку компилятор PHP. Сообщения об ошибках компилятора не только бесполезны, но и часто разочаровывают, если разработчики не понимают, что они означают.