PHP:打印未定义的变量而不发出警告

时间:2008-12-18 01:26:52

标签: php variables warnings undefined

我只是想知道是否有一种快速的方法来回应未定义的变量而不会收到警告? (我可以更改错误报告级别,但我不想。)我到目前为止最小的是:

isset($variable)?$variable:''

我不喜欢这个原因有几点:

  • 这有点“罗嗦”而复杂
  • $variable重复
  • 空白字符串的回声总是让我烦恼。
  • 我的变量名称可能会更长,例如$arrayvar['parameter']

7 个答案:

答案 0 :(得分:13)

您可以使用error suppression operator @。

运行它
echo @$variable;

但是,最好不要忽略未设置的变量。未设置的变量可能表示脚本存在逻辑错误,最好确保在使用前设置所有变量。

答案 1 :(得分:9)

您可以使用从here获取的ifsetor()示例:

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

例如:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

这不会生成通知,因为变量是通过引用传递的。

答案 2 :(得分:3)

echo @$variable;

答案 3 :(得分:1)

这是a long-standing issue with PHP,他们打算用PHP 6中的isset_or()(或类似函数)修复它,希望该功能也可以用于PHP 5.3。现在,您必须在问题中使用isset()/ ternary示例,否则使用@前缀来消除错误。恕我直言,这是证明在PHP中使用@的唯一理由。

我不担心使用带有空字符串的echo的速度问题,将它包装在if子句中可能比仅回显空字符串更昂贵。

答案 4 :(得分:1)

你可以用?? PHP 7 及更高版本的选择器。

echo $variable??'not defined';

答案 5 :(得分:0)

未定义的变量很常见,我建议你先用null初始化变量

$var = null;

或禁用通知的错误报告:

error_reporting(E_ALL^E_NOTICE);

答案 6 :(得分:-1)

使用@ -operator抑制错误强制解释器更改错误级别,执行函数然后更改错误级别。这会减少脚本运行时间。

构建这样的函数将至少消除3个原因:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);

但为什么回应未定义的变量?这听起来好像编码不好......