php - 从可能不存在而没有错误的数组值分配 PHP 变量的最快方法

标签 php arrays coding-style variable-assignment

这是一种代码高尔夫,但我不觉得这是题外话,因为这个问题实际上在我工作时经常出现,保持代码简洁和可读性是非常的主题。

//$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 not NULL, or else its second operand. This means the $_GET['mykey'] ?? "" is completely safe and will not raise an E_NOTICE

旧方法(hackish 解决方法):

$variable = @$array['A'] ?: null;

这使用错误抑制运算符 @ 来使通知静音,并使用短的三元运算符 ?:。如果我们只需要将$variable设置为null,如果$array['A']没有设置,可以简写为

$variable = @$array['A'];

应该注意的是,@ 被认为是不好的做法,我实际上觉得推荐它有点脏,但如果你能忍受偶尔违反最佳实践的情况,这是一种不适合的情况造成伤害:

这一行中只有一种可能的错误( undefined variable /偏移量)。您期待它并优雅地处理它。

关于php - 从可能不存在而没有错误的数组值分配 PHP 变量的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32896294/

相关文章:

javascript - 如何在不使用全局变量的情况下编辑待办事项列表 函数式编程 Vanilla JS

c++ - 当我尝试使用指针打印数组元素时打印垃圾值

c++ - 如何有效地构建具有多个菜单的终端应用程序?

php - 查询 user_meta 表以在 wp_users 表中查找电子邮件

javascript - 使用外部 URL 中的变量填充文本框,无需提交表单

php - 如何将数组添加到数组中成为二维数组?

javascript - 如何通过ajax向PHP传递和检索JSON函数作为数据?

python:如何将列添加到numpy中的记录数组

visual-studio - 将Visual Studio的 'Code Style settings'导出为.editorconfig

c++ - 在 C++ 中使用 'this' 是一种好习惯吗?