这是一种代码高尔夫,但我不觉得这是题外话,因为这个问题实际上在我工作时经常出现,保持代码简洁和可读性是非常的主题。
//$array = ['A' => 'FOO', 'B' => 'BAR'];
//We don't necessarily know what this is
// :-)
$variable = ( isset($array['A']) ) ? $array['A'] : NULL );
//We just want $variable to be NULL if the key isn't in the array
工作正常,但是变量名变长等会变得很长,而且很难读取大的多维数组...
[
'Foo' => 'Bar',
'Boo' => [
'FooBarMacFooBar' => ( isset($SomeOtherLongVariable['BooBarMcFooFar']) ) ? $SomeOtherLongVariable['BooBarMcFooFar'] : NULL )
] ;
]
除了丑陋和难以阅读之外,它不符合 PSR-2 的最大线宽(80?)。
如果我这样做飞机就不会坠毁...
[
'Foo' => 'Bar',
'Boo' => [
// THIS WILL THROW AND ERROR NOTICE IF THE KEY DOESN'T EXIST
'FooBarMacFooBar' => $SomeOtherLongVariable['BooBarMcFooFar']
] ;
]
...但是如果数组的内容未知,它会用关于“数组键不存在”的错误通知填满日志。
有解决办法吗? (除了写一个辅助函数)
(...除了使用 Ruby :-)
最佳答案
这多年来一直困扰着 PHP 开发人员,在 PHP 7 中,COALESCE 运算符 ??
终于出现了:
新方法(从 PHP 7 开始):
$variable = $array['A'] ?? null
与您的代码完全相同。
引用RFC :
The coalesce, or
??
, operator is added, which returns the result of its first operand if it exists and is notNULL
, or else its second operand. This means the$_GET['mykey'] ?? ""
is completely safe and will not raise anE_NOTICE
旧方法(hackish 解决方法):
$variable = @$array['A'] ?: null;
这使用错误抑制运算符 @
来使通知静音,并使用短的三元运算符 ?:
。如果我们只需要将$variable
设置为null
,如果$array['A']
没有设置,可以简写为
$variable = @$array['A'];
应该注意的是,@
被认为是不好的做法,我实际上觉得推荐它有点脏,但如果你能忍受偶尔违反最佳实践的情况,这是一种不适合的情况造成伤害:
这一行中只有一种可能的错误( undefined variable /偏移量)。您期待它并优雅地处理它。
关于php - 从可能不存在而没有错误的数组值分配 PHP 变量的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32896294/