【问题标题】:Best way to handle Undefined array key in PHP 8.0 [closed]在 PHP 8.0 中处理未定义数组键的最佳方法 [关闭]
【发布时间】:2022-01-01 13:50:54
【问题描述】:

几个月前我升级到了 PHP 8.0,和许多开发人员一样,我在此通知中遇到的问题变成了警告。我不明白处理这个问题的正确方法,所以我想知道如何解决这个问题而不会使我的代码臃肿。

以前我会这样做

public function myFunction($options = []){

    //we know $options is an array, so let's check if the key is there and get its value at the same time
    if($run = $options['run']){ 
            
        //do something with $run
            
    }
}

$options 被初始化为一个数组,如果定义了键'run',我就可以使用它的值。我现在用这段简单的代码处理的建议是......

public function myFunction($options = false){

    if(isset($options['run']){

        $run = $options['run'];
            
        //do something with $run
            
    }
}

在我看来,这似乎是增加了一个额外的不需要的步骤:真的应该如何处理吗?

提前致谢

【问题讨论】:

    标签: php key undefined


    【解决方案1】:

    您可以这样做以避免典型的 if/else 阻塞

    $run = $options['run'] ?? null;
    

    了解更多详情https://wiki.php.net/rfc/isset_ternary

    【讨论】:

      【解决方案2】:

      您可以通过在表达式前附加“@”来抑制错误。如果键不存在,$run 将为空:

      if($run = @$options['run']){ 
          //do something with $run   
      }
      

      Error Control Operators (php.net)

      【讨论】:

      • 抑制错误消息并不能阻止错误的发生。所以在几乎所有情况下,这基本上都是一个坏主意
      • 在实践中,这是一个在像这样的简单情况下非常有效的快捷方式:array['string']。我看不出这会导致什么问题?结果为 null 或请求的值。
      • 如果 $options 成为一个类的实例,这会使代码崩溃,你永远不会看到错误,坏主意
      • 错误未消除:PHP 致命错误:未捕获错误:无法将 A 类型的对象用作数组。 (使用 PHP 7.2)。此外,在 PHP 8 中,此运算符会显示更多错误 php.watch/versions/8.0/fatal-error-suppression
      猜你喜欢
      • 2013-05-16
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多