Ale*_*lex 19 php zend-framework
我厌倦了编写三元表达式来清理数据,例如:
$x = isset($array['idx']) ? $array['idx'] : null;
// and
$x = !empty($array['idx']) ? $array['idx'] : null;
Run Code Online (Sandbox Code Playgroud)
是否有本机方式或ZF访问器/过滤器来获取某些给定数组的数组元素值,而不:
error_reportingisset/ empty支票@就像是:
$x = get_if_set($array['idx']);
// or
$x = Zend_XXX($array, 'idx')
Run Code Online (Sandbox Code Playgroud)
Yas*_*mez 29
PHP7引入了null coalesce运算符 ??.假设你很幸运能够运行它,你就可以做到
$x = $array['idx'] ?? null;
Run Code Online (Sandbox Code Playgroud)
hak*_*kre 22
只要您只需要NULL作为"默认"值,就可以使用错误抑制运算符:
$x = @$array['idx'];
Run Code Online (Sandbox Code Playgroud)
批评:使用错误抑制运算符有一些缺点.首先它使用了错误抑制运算符,因此如果代码的那部分有一些问题,则无法轻松恢复问题.此外,如果未定义标准错误情况会污染寻找尖叫声.你的代码并不像它本身那样精确地表达自己.另一个潜在的问题是使用无效的索引值,例如为索引等注入对象.这将被忽视.
它会阻止警告.但是,如果您还想允许其他默认值,则可以通过ArrayAccess接口封装对数组偏移的访问:
class PigArray implements ArrayAccess
{
private $array;
private $default;
public function __construct(array $array, $default = NULL)
{
$this->array = $array;
$this->default = $default;
}
public function offsetExists($offset)
{
return isset($this->array[$offset]);
}
public function offsetGet($offset)
{
return isset($this->array[$offset])
? $this->array[$offset]
: $this->default
;
}
public function offsetSet($offset, $value)
{
$this->array[$offset] = $value;
}
public function offsetUnset($offset)
{
unset($this->array[$offset]);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
$array = array_fill_keys(range('A', 'C'), 'value');
$array = new PigArray($array, 'default');
$a = $array['A']; # string(13) "value"
$idx = $array['IDX']; # NULL "default"
var_dump($a, $idx);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14432 次 |
| 最近记录: |