eme*_*his 8 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
Run Code Online (Sandbox Code Playgroud)
工作正常,但变长名称等变得很长,这使得很难读取大型多维数组......
[
'Foo' => 'Bar',
'Boo' => [
'FooBarMacFooBar' => ( isset($SomeOtherLongVariable['BooBarMcFooFar']) ) ? $SomeOtherLongVariable['BooBarMcFooFar'] : NULL )
] ;
]
Run Code Online (Sandbox Code Playgroud)
除了丑陋且难以阅读之外,它不符合PSR-2的线宽最大值(80?).
如果我这样做,飞机不会崩溃......
[
'Foo' => 'Bar',
'Boo' => [
// THIS WILL THROW AND ERROR NOTICE IF THE KEY DOESN'T EXIST
'FooBarMacFooBar' => $SomeOtherLongVariable['BooBarMcFooFar']
] ;
]
Run Code Online (Sandbox Code Playgroud)
...但是如果数组的内容未知,它将填充日志,并显示有关"数组键不存在"的错误通知.
这个问题有方法解决吗?(除了编写辅助函数)
(...除了使用Ruby :-)
多年来一直困扰着PHP开发人员,在PHP 7中,COALESCE运营商??终于到了:
$variable = $array['A'] ?? null
Run Code Online (Sandbox Code Playgroud)
与您的代码完全相同.
引用RFC:
??添加了coalesce,或者运算符,如果它存在且不存在,则返回其第一个操作数的结果NULL,否则返回其第二个操作数.这意味着它$_GET['mykey'] ?? ""是完全安全的,不会提高E_NOTICE
$variable = @$array['A'] ?: null;
Run Code Online (Sandbox Code Playgroud)
这使用错误抑制运算符@来静音通知和短三元运算符?:.如果我们只需要设置$variable为nullif $array['A']未设置,则可以缩短为
$variable = @$array['A'];
Run Code Online (Sandbox Code Playgroud)
应该注意的是,这@被认为是不好的做法,我实际上觉得它有点脏,但如果你能忍受偶尔的最佳做法违规,这是一种不会造成伤害的情况:
此行中可能发生一个可能的错误(未定义的变量/偏移量).你期待它并优雅地处理它.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |