【发布时间】:2016-12-05 04:50:52
【问题描述】:
我以为我的代码中存在错误,但通过隔离问题,我发现了 switch case 中 error_log() 的一些“奇怪”行为。
我添加了一些 error_log 用于调试,但无论何时我通过 switch 运行,error_log 总是会被触发,即使调用是在有效案例之外进行的。
这是我的代码中让我发现这种奇怪之处的确切部分:
switch($LLTP->request()){
case 'json':
/* some code commented out for debug here */
error_log('json');
echo 'json';
break;
default:
/* some code commented out for debug here */
error_log('html');
echo 'html';
break;
}
请求方法简单明了,返回'json','html','ajax'等字符串。
public function request(){
return $this->requests;
}
因此,如果开关是 html,则默认启动,我会得到预期的结果:
回显“html”(预期)
错误日志“html”(预期)
但是当我使用“json”开关运行它时,我在屏幕上和 error_log 中得到了预期的“json”,但我也得到了“html”错误条目(没有回显)。
回显“json”(预期)
错误日志“json”(预期)
errorlog 'html,referer:https://www.example.com/home.json'(意外)
这是正常行为吗?我第一次注意到它,如果我尝试用另一个示例代码重现“怪异”:
$vv='json';
switch($vv){
case 'json':
echo 'json';
error_log('json');
break;
default:
echo 'html';
error_log('html');
break;
}
我明白了,(在错误日志中)
[错误] json(预期)
[错误] json,引用者:http://www.example.com/home.json(意外为 这是日志中的第二个条目)
我迷路了,有些我不明白或预期的结果不是我预期的。
PS:我不在页面上输出错误,我只在日志中记录错误。如果这和它有什么关系o.O
【问题讨论】:
-
很高兴知道人们为什么投反对票。如果你这样做,请解释一下。
-
无法重现。错误日志中的时间戳是否相同?
-
是的,除了有时它们相隔 1 秒。令我惊讶的是,在这种特定情况下,我的行为与平时完全不同。我什至隔离了用于调试的包含、方法和函数。一定是我事先编码的东西。我只是惊呆了,因为其他一切都按预期工作。如果我发现我会在这里发表我的结论
-
另外,第一次出现只显示我传递的字符串。但是最后一个日志条目在字符串之后显示了引用者。请参阅上面引用的日志。
-
你能在命令行重现它吗?
标签: php switch-statement error-log