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