4

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

isset($variable)?$variable:''

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

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

7 回答 7

15

您可以使用错误抑制运算符@ 运行它。

echo @$variable;

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

于 2008-12-18T01:31:38.347 回答
9

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

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

例如:

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

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

于 2008-12-18T14:31:07.883 回答
3
echo @$variable;
于 2008-12-18T01:34:39.917 回答
1

这是PHP 的一个长期存在的问题,他们打算isset_or()在 PHP 6 中使用(或类似的函数)修复它,希望该功能也能在 PHP 5.3 中使用。现在,您必须在问题中使用 isset()/ternary 示例,或者使用 @ 前缀来消除错误。恕我直言,这是唯一可以证明在 PHP 中使用 @ 的情况。

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

于 2008-12-19T00:52:37.567 回答
1

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

echo $variable??'not defined';
于 2021-03-03T10:29:39.887 回答
0

undefined 变量很常见,我建议你先用 null 初始化变量

$var = null;

或禁用通知的错误报告:

error_reporting(E_ALL^E_NOTICE);
于 2012-07-18T08:29:42.300 回答
-1

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

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

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

echoVar($arrayvar['parameter']);

但是为什么要回显未定义的变量呢?这听起来像没有很好的编码......

于 2008-12-19T00:16:09.247 回答