Рассмотрим следующие два файла:PHP Режим Lint не улавливает Несовместимые декларации ошибки
ParentClass.php
<?php
abstract class ParentClass
{
abstract public function foo(array $arg1, array $arg2);
}
ChildClass.php
<?php
require_once "ParentClass.php";
class ChildClass extends ParentClass
{
public function foo(array $arg1)
{
print_r($arg1);
}
}
Теперь давайте попробуем нащупывать эти файлы:
$ php -l ParentClass.php
No syntax errors detected in ParentClass.php
$ php -l ChildClass.php
No syntax errors detected in ChildClass.php
Отлично, никаких синтаксических ошибок!
Но подождите! Там проблема:
$ php ChildClass.php
PHP Fatal error: Declaration of ChildClass::foo(array $arg1) must be compatible
with ParentClass::foo(array $arg1, array $arg2) in
/home/mkasberg/php_syntax_check/ChildClass.php on line 5
Итак, почему же не php -l
поймать его? Это ошибка, которая может быть обнаружена при «компиляции» (хотя php не является скомпилированным языком). Кажется, что php -l
может заметить, что декларации несовместимы. Есть ли способ запустить php -l
так, что он поймает эту ошибку? Есть ли другой инструмент, который поймает ошибку?
Хорошее наблюдение, что он будет ловить ошибки в одном файле. К сожалению, это плохо масштабируется. Этот пример немного надуман - мне очень интересно делать это для более крупных проектов. – mkasberg
Да, это было просто, чтобы продемонстрировать, как работает 'php -l'. См. Http://stackoverflow.com/questions/378959/is-there-a-static-code-analyzer-like-lint-for-php-files – ShiraNai7
Phan выглядит интересно. Возможно, я начну использовать это после перехода на PHP 7. – mkasberg