【问题标题】:How to make this PHP snippet work without warning?如何让这个 PHP 片段在没有警告的情况下工作?
【发布时间】:2009-09-21 13:44:16
【问题描述】:

代码很短,但完整

function process($obj)
{
    if(empty($obj))return 1;
    return 2;
}


echo process($arr['nosuchkey']);

众所周知,调用empty($arr['nosuchkey']) 永远不会报告警告。

但是process($arr['nosuchkey'])会举报通知。

是否有不禁用警告的解决方法?比如说语法?

【问题讨论】:

  • 警告信息是什么?

标签: php warnings


【解决方案1】:

您可以使用error control operator @,但这会抑制更多内容,而不仅仅是通知。

echo @process($arr['nosuchkey']);

你最好在函数调用之前检查一下:

if (array_key_exists('nosuchkey', $arr))
    echo process($arr['nosuchkey']);

或者单独传递密钥

echo process($arr, 'nosuchkey');

确保您知道 empty()isset()array_key_exists() 之间的区别 - 它们会吸引很多人。

【讨论】:

  • 函数前检查会导致函数完全没用
  • 是的,请避免使用@运算符。
【解决方案2】:

试试这个

 function process(&$obj)

我不确定它是否会起作用

【讨论】:

    【解决方案3】:

    也许

    function process($obj, $index = null) {
        if(is_array($obj))
        {
             if(!array_key_exists($index, $obj))
                 return 1;
             else
                 return 2;
        }
    
        if(empty($obj)) 
            return 1;
    
        return 2;
    
    }
    

    请不要尽可能用@隐藏警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2021-11-22
      相关资源
      最近更新 更多