1

为什么 PHP-l开关在test.html.

$ cat test.html 
<?php
error_reporting(E_ALL);
echo "Hello, world!";

sdfsdfsdfsdf

?>
$ php -dhtml_errors=0 -ddisplay_errors=On -l test.html 
No syntax errors detected in test.html
$ php test.html 
Hello, world!PHP Notice:  Use of undefined constant sdfsdfsdfsdf - assumed 'sdfsdfsdfsdf' in test.html on line 7
$ 

也没有发现其他类型的错误,例如未定义的函数、require_once()不存在的文件、数组声明中的语法错误等。为什么会这样?

谢谢。

4

2 回答 2

3

-l仅语法检查(lint)

-l执行静态语法检查。代码从未真正执行过。而且在您的代码中没有语法错误。

文件末尾的乱码被视为常量(因为它是常量的有效名称),未定义的常量评估为它们的字符串表示(并导致 E_NOTICE)。由于它是文件中的最后一条语句,因此缺少的分号也不会导致语法错误。

由于 PHP 是一种动态语言,因此如果不执行代码就无法检测到未定义的常量——define()毕竟它只是一个普通函数。

于 2013-03-03T12:47:06.610 回答
2

这些不是语法错误,而是运行时错误。-l 仅对文件进行 lints。

于 2013-03-03T12:37:05.693 回答