1

我正在尝试在我的代码中打开错误报告。我的 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';
?>

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

EDIT2:注意我提到的:

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

1 回答 1

3

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

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

注意:使用未定义的常量 sample_error - 假定为“sample_error”

现在,如果没有关闭?>,解析器不会将文件结尾识别为“当前语句的结尾”,因此您sample_error不会自动更正为字符串文字,最终会出现解析错误。如果你用 a 关闭最后一条语句,;你会回到之前的纠错行为。在我的 php 5.4.17 系统上打印:

PHP Parse 错误:语法错误,文件意外结束

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

于 2013-10-22T18:45:31.843 回答