Выискивая ошибки разбора PHP - PullRequest
       31

Выискивая ошибки разбора PHP

4 голосов
/ 24 августа 2009

При написании PHP-кода вы можете очень трудно отследить ошибки синтаксического анализа, если не помните, какие части вы редактировали ранее. Мне было бы интересно услышать о любых проницательных методах поиска этих ошибок, которые вы, возможно, обнаружили.

Пример: неожиданное ';', ожидание T_FUNCTION в someclass.php в строке 877

Эта расплывчатая ошибка указывает на то, что у вас есть неожиданность; в классе, содержащем 877 строк кода PHP, и ошибка определенно не в последней строке. Сообщение об ошибке вводит в заблуждение? Где и как вы начинаете искать, помимо того, что начинаете с вершины и просто пытаетесь найти место, где вас обижают, просматривая каждую строку кода.

Ответы [ 7 ]

5 голосов
/ 24 августа 2009

Прежде всего, я бы использовал редактор, который выделяет ошибки PHP на лету, когда вы набираете свой код, например, Eclipse PDT (который довольно мощный, активно поддерживается, и бесплатен, и OSS) - это поможет обнаружить некоторые ошибки практически сразу, без необходимости выполнения кода.

Если вы используете его вместе с подключаемым модулем Subversion (для интеграции доступа SVN в Eclipse), он также может отображать то, что он называет «быстрой разницей»: выделено поле измененных строк, которые не были переданы в SVN. - помогает определить, что вы изменили с момента последнего коммита.


Обратите внимание, однако, что, поскольку он основан на Eclipse, требует довольно мощный компьютер (я бы сказал, что требуется двухъядерный процессор с 2 ГБ ОЗУ, 1 ГБ, как правило, недостаточно, если вы также хотите использовать другое программное обеспечение). одновременно ^^)


Затем, когда вы довольно долго программируете на PHP, вы, вероятно, сможете понять эти сообщения быстрее / лучше и будете знать, где искать; -)

2 голосов
/ 24 августа 2009

Вы также можете выполнять частую проверку синтаксиса, независимо от того, какой редактор вы используете:

php -l file.php

Обратите внимание, что я использую слово "частый". Если вы используете vim, в вашем файле .vimrc может оказаться полезным следующее:

map <F12> <ESC>:!php -l %<CR>

Просто нажмите F12 в любое время, чтобы проверить синтаксис на лету.

2 голосов
/ 24 августа 2009

Ошибки такого типа обычно заключаются в "{" переключателя if, while, do, function, class и т. Д. Не закрыты.

2 голосов
/ 24 августа 2009

Если вы используете какую-либо систему управления версиями, вы можете искать различия между фактической и старой версиями файла / класса.

1 голос
/ 24 августа 2009

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

class Foo {
  function blah() {
  };
}

или, возможно:

class Foo {
  protected $foo;;
}

Точка с запятой недопустима в обоих этих контекстах.

1 голос
/ 24 августа 2009

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

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

0 голосов
/ 25 августа 2009

Zend Studio имеет отличный инструмент для отладки, который позволяет вам использовать различные опции, включая установку точек останова, пошаговое выполнение кода и проверку переменных / параметров. Конечно, все это идет с ценой. = (* * Тысяча одна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...