需要检查项目中是否存在该项目,并添加该项目或按金额增加该值.
if(isset($this->_costRemovedByLineItem[$objectId])) {
$this->_costRemovedByLineItem[$objectId] += $amount;
}else{
$this->_costRemovedByLineItem[$objectId] = $amount;
}
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,这可以简化.
此方法减少了一点,因为您不需要else语句或两次分配金额.
if(!isset($this->_costRemovedByLineItem[$objectId])) {
$this->_costRemovedByLineItem[$objectId] = 0;
}
$this->_costRemovedByLineItem[$objectId] += $amount;
Run Code Online (Sandbox Code Playgroud)
可以在所有版本的PHP中使用的东西:
@$this->_costRemovedByLineItem[$objectId] += $amount;
Run Code Online (Sandbox Code Playgroud)
的@(错误控制操作员)将导致PHP忽略所造成的不存在的索引中的差错,创建元素(具有空值),然后添加$amount到它,导致的值$amount(作为空值被转换为0作为一个数字).
警告使用
@运算符可能会使调试代码变得更加困难,因为它会隐藏您可能需要查看的错误消息(例如,即使$this不存在,或者没有调用对象元素_costRemovedByLineItem,PHP也会创建它们与数组一起).请参阅我的示例代码中的第三种情况.
或者在PHP7中,您可以使用Null Coalescing Operator:
$this->_costRemovedByLineItem[$objectId] = ($this->_costRemovedByLineItem[$objectId] ?? 0) + $amount;
Run Code Online (Sandbox Code Playgroud)
在PHP <7中你可以使用 ternary operator
$this->_costRemovedByLineItem[$objectId] = (isset($this->_costRemovedByLineItem[$objectId]) ? $this->_costRemovedByLineItem[$objectId] : 0) + $amount;
Run Code Online (Sandbox Code Playgroud)
每个的一个较短的例子:
$amount = 4;
@$a[5] += $amount;
print_r($a);
$b[6] = ($b[6] ?? 0) + $amount;
print_r($b);
@$c->x[5] += $amount;
print_r($c);
$d[3] = (isset($d[3]) ? $d[3] : 0) + $amount;
print_r($d);
Run Code Online (Sandbox Code Playgroud)
输出:
Array ( [5] => 4 )
Array ( [6] => 4 )
stdClass Object (
[x] => Array ( [5] => 4 )
)
Array ( [3] => 4 )
Run Code Online (Sandbox Code Playgroud)