Перевірка синтаксису PHP онлайн
Парсить код для обраної версії PHP і показує рядок та колонку помилки. Код не виконується.
Знаходить помилку синтаксису до того, як її знайде продакшен
Зайва дужка, пропущена крапка з комою чи конструкція з новішої версії, ніж стоїть на сервері: усе це видно лише під час запуску, а на продакшені воно виглядає як біла сторінка. Вставте файл або фрагмент, виберіть версію PHP, і за секунду побачите або «синтаксис правильний», або точне місце помилки.
Парсер будує з коду дерево (AST) і зупиняється на першій конструкції, яка не відповідає граматиці вибраної версії. Той самий підхід використовують PHPStan, Rector і PHP-CS-Fixer. Локально те саме дає php -l, а в CI варто мати обидва кроки: спочатку lint усіх файлів, потім статичний аналіз.
// у консолі проєкту:
// php -l app/Http/Controllers/JobController.php
// No syntax errors detected in app/Http/Controllers/JobController.php
// або програмно, як робить цей інструмент:
use PhpParser\ParserFactory;
use PhpParser\PhpVersion;
$parser = (new ParserFactory)->createForVersion(PhpVersion::fromString('8.4'));
try {
$parser->parse($code);
} catch (\PhpParser\Error $e) {
echo $e->getRawMessage(), ' у рядку ', $e->getStartLine();
}
Це перевірка синтаксису, а не запуск. Код парситься бібліотекою nikic/php-parser і ніколи не виконується, тому сюди можна вставляти будь-що. Але саме тому інструмент не бачить помилок часу виконання: невизначені функції, неправильні типи аргументів, відсутні класи. Для цього є PHPStan.
Що питають про цей інструмент
Парсер розуміє синтаксис усіх версій до 8.5 включно, а вибір версії впливає на конструкції, що змінили значення між релізами: наприклад, нові зарезервовані слова або те, як читається код без тегів. Він не заборонить property hooks для 8.2: чи підтримує ваша версія конкретну конструкцію, перевіряйте в документації або php -l на самому сервері.
php -l перевіряє синтаксис тією версією PHP, яка встановлена у вас. Тут можна перевірити код під версією, якої на машині ще немає, наприклад перед оновленням проєкту. Результат той самий: помилка з рядком і колонкою або підтвердження, що синтаксис правильний.
Без відкриваючого тега весь файл вважається HTML і синтаксично коректний, тому інструмент додає <?php сам, якщо тега немає. Якщо у вас змішаний файл із HTML, вставляйте його цілком разом із тегами.