我有PHP代码试图读取很多可能存在或不存在的值。每个失败的读取都会显示“未定义”错误。我可以用类似
之类的东西来保持沉默if(!empty($meta['image_1_url'])) $image_1_url = $meta['image_1_url'];
但我宁愿PHP不要抱怨他们。我已经注释掉了
<?php
//ini_set('display_errors', 1);
//error_reporting(E_ALL);
我位于页面顶部,但错误仍然打印出来。
有谁知道如何防止打印错误?
答案 0 :(得分:7)
error_reporting(E_ALL & ~E_NOTICE);
以上内容将显示错误和警告,但不会显示通知。
https://secure.php.net/manual/en/function.error-reporting.php
请注意,通知可能很有用。一般来说,最好以这样的方式编写代码,除非出现问题,否则不应生成 。
除了您提供的示例之外,您还可以使用三元运算符:
$image_1_url = isset($meta['image_1_url']) ? $meta['image_1_url'] : '';
即使未设置image_1_url
,上述代码也不会生成通知。
从PHP 7开始,您还可以使用Null Coalesce Operator
$image_1_url = $meta['image_1_url'] ?? '';
答案 1 :(得分:0)
如果您收到有关上述示例的通知,则表示您正在使用索引或可变,而无需在代码中的任何位置定义它。你的例子:
if(!empty($meta['image_1_url'])) $image_1_url = $meta['image_1_url'];
可以使用isset()
进行检查。是否设置值,如果未设置值,则在变量中定义空值。
if(isset($meta['image_1_url']) && !empty( $meta['image_1_url'] )){
$image_1_url = $meta['image_1_url'];
}
else{
$image_1_url = '';
}
对于防止未定义通知的其他问题,请注意在开发线上error_reporting
上的良好做法可以节省您的时间。
如果您收到通知,请记住您的代码无效。它只有在收到警告时才有效。如果忽略警告,您的代码将会执行。