防止“未定义”错误在 PHP 中显示


Preventing "undefined" errors from displaying in PHP

我有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);

我在页面顶部,但错误仍然打印出来。

有谁知道我如何防止打印错误?

 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 运算符

$image_1_url = $meta['image_1_url'] ?? '';

如果您在上述示例中收到通知,则意味着您正在使用索引或 vairable,而无需在代码中的任何位置定义它。您的示例:

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节省您的时间。

如果您收到通知,请记住您的代码将不起作用。它只有在收到警告时才能工作。如果忽略警告,代码将执行。