【问题标题】:PHP - Variable Safe Output [duplicate]PHP - 变量安全输出
【发布时间】:2019-07-25 22:27:41
【问题描述】:

我正在从非官方 API 获取信息。这个 API 非常大,有时其中没有所有元素。我正在尝试在我的网站上显示来自此 API 的值,而不会出现任何错误。

我所做的是像这样检查 JSON 值,以防止错误:

echo (isset($json['item'])) ? $json['item'] : '';

有效,但看起来非常杂乱无章。我考虑过创建一个函数来处理安全输出,如下所示:

public function safeoutput($input, $fallback = '') {
    if(isset($input)) {
        return $input;
    }

    if(empty($input) || !isset($input)) {
        return $fallback;
    }
}

然后做:

echo $engine->safeoutput($json['item'], 'Unavailable');

不幸的是仍然输出未定义变量错误。

我想知道是否有更好的方法来处理我在示例中显示的此类信息。

【问题讨论】:

  • PHP7 知道简单的语法:$json['item'] ?? 'my default value'.

标签: php isset


【解决方案1】:

问题是可能没有设置密钥,所以你必须检查它:

public function safeoutput($input, $key, $fallback = '') {
    if(isset($input[$key])) {
        return $input;
    }

    if(empty($input[$key]) || !isset($input[$key])) {
        return $fallback;
    }
}

或者你可以有一个更短的版本:

public function safeoutput($input, $key, $fallback = '') {
    if(array_key_exists($key, $input) && !empty($input[$key])){
        return $input[$key];
    }
    return $fallback;
}

并用数组和键调用方法:

echo $engine->safeoutput($json, 'item', 'Unavailable');

【讨论】:

  • 我已经尝试过了,但是如果键不存在,它仍然会为我触发未定义的索引错误。
  • 做一些调试,听起来可能还有其他问题。您可以test the method 调用空数组或缺少键来检查
  • 我的错,现在开始工作了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多