2

我想知道是否有更优雅的方式来做到这一点:

$foo = (isset($bar) and array_key_exists('meh', $bar)) ? $bar['meh'] : '';

如果我删除isset部分,如果$bar不是数组, PHP 会发出警告;如果我删除array_key_exists部分,如果meh键不在数组中,PHP 会发出警告。有没有更优雅、无警告的方式来达到同样的目的?

4

2 回答 2

2

您可以直接引用密钥。如果 $bar 未定义,它内部isset甚至不会抛出异常。

$foo = isset($bar['meh']) ? $bar['meh'] : '';

array_key_existsisset之间的区别在于,如果键对应于一个值,isset它将返回。因此,在我上面的代码中,一个值将导致开始为空字符串,而不是. 如果这是一个问题,那么您当前的方法将是最好的。FALSENULLNULL$fooNULL

于 2012-06-26T14:21:09.807 回答
2

您完全按照您提到的警告“保护”代码所需的步骤。

但是,警告是有原因的。通常,检查是否可以防止您尝试访问的变量未初始化的情况更有意义。

于 2012-06-26T14:21:19.467 回答