我想知道是否有更优雅的方法来做到这一点:
$foo = (isset($bar) and array_key_exists('meh', $bar)) ? $bar['meh'] : '';
如果删除isset
部分,如果$bar
不是数组,PHP会发出警告,如果删除array_key_exists
部分,PHP会在{{1}发出警告键不在数组中。是否有一种更优雅,无警告的方式来达到同样的目的?
答案 0 :(得分:2)
您可以直接引用该密钥。在isset
内,如果$ bar未定义,它甚至不会抛出异常。
$foo = isset($bar['meh']) ? $bar['meh'] : '';
array_key_exists和isset之间的区别在于,如果密钥对应isset
值,FALSE
将返回NULL
。在上面的代码中,NULL
值会导致$foo
开始空字符串,而不是NULL
。如果这是一个问题,那么您目前的方法将是最好的。
答案 1 :(得分:2)
根据您提到的警告,您可以完全采取“保护”代码所需的步骤。
然而,警告是有原因的。通常,如果可以防止未尝试访问的变量未初始化的情况,则检查更有意义。