PHP - 在没有关闭标记的情况下报告错误


PHP - error reporting without closing tags

我正在尝试在我的代码中打开错误报告。我的PHP版本是5.3.6。

当我使用以下代码时,我看到错误通知:

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
sample_error
?>

即使在注释行 2 之后,

error_reporting(E_ALL);

但是当我删除结束标签时,我只能看到空白页。

我不想再次开始关于关闭/不关闭PHP标签的圣战。我只想知道,这对错误报告有什么影响,因为几个月来每天用 PHP 编程,在运行有/没有它的脚本时,我没有注意到任何类似的差异。

编辑:现在我注意到,当我在"sample_error"测试线之后加上回声时

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
sample_error
echo 'test';
?>

再次我只能看到空白页。我很困惑...

编辑2:我提到的通知:

Notice: Use of undefined constant sample_error - assumed 'sample_error' in /home/hozanie/public_html/testy/error_report.php on line 5 

您应该会收到一个解析错误,最后没有?>。这是因为 php 解析器试图纠正用户错误的方式。

当末尾有一个?>时,解析器会识别带有未声明常量的最后一行"(这就是解析器sample_error的样子),并简单地将其转换为字符串"sample_error"。在 php 中,您可以将字符串文字作为语句,这不是解析错误,基本上结束?>也充当;。您应该看到如下所示的内容:

注意:使用未定义的常量sample_error - 假设 "sample_error"

现在,如果没有结束?>解析器不会将文件结尾识别为"当前语句的结束",因此您的sample_error不会被自动更正为字符串文字,并且您最终会得到解析错误。如果使用 ; 关闭最后一条语句,则会返回到上一个纠错行为。在我的 php 5.4.17 系统上,它打印:

PHP 解析错误:语法错误、文件意外结尾

(我不确定这本身是否是一个错误更正,我已经看到很多 php3 代码具有类似的$array[somestuff],这可能是一些向后兼容性功能)。