所以我正在努力清理一个可怕的代码库,并且我正在慢慢转向完整的错误报告。
这是一个艰巨的过程,有数百条通知,内容如下:
Notice: Undefined index: incoming in /path/to/code/somescript.php on line 18
由于使用变量,假设未定义的变量将被视为 false,例如:
if($_SESSION['incoming']){
// do something
}
目标是能够知道何时引入了错误的未定义变量,能够使用严格的错误/通知检查,作为重构过程的第一阶段,最终包括重写依赖标准输入的代码点数组以这种方式。据我所知,有两种方法可以替换可能已定义或未定义的变量
如果尚未定义,则以抑制通知的方式。
仅替换变量的实例是相当干净的,例如$_REQUEST['incoming']
只寻找真实的价值观
@$_REQUEST['incoming'].
替换变量的实例是相当脏的,例如$_REQUEST['incoming']
与“标准”测试,这是
(isset($_REQUEST['incoming'])? $_REQUEST['incoming'] : null)
而且您要添加一个三元/内联 if,这是有问题的,因为您实际上可以在复杂代码中以不同方式嵌套括号并完全改变行为。
那么......使用该工具有什么不可接受的方面吗?@
与使用错误抑制符号相比(isset($something)? $something : null)
?
编辑:为了尽可能清楚,我不会将“重写代码变得更好”与“@”进行比较,由于真正重构的复杂性增加,这是此过程的后期阶段。目前,我只是比较我所知道的用非通知抛出版本替换 $undefined_variable 的两种方法(可能还有其他方法)。