我想知道何时使用ArrayObject()
代替Array()
是否恰当?这是我一直在努力的一个例子。
对我而言,我认为一个简单的数组会起作用,但我在手册中找到了ArrayObject()
,我想知道,如果用一个而不是一个简单的数组会更好。
public function calculateTotal(){
if(count($this->items) > 0){
$n = 0;
foreach($this->items as $item){
if($item->size == 'small'){
$k = $item->price->small;
}
if($item->size == 'large'){
$k = $item->price->large;
}
$n += $k * $item->quantity;
}
}else{
$n = 0;
}
return (int) $n;
}
现在我对如何构建对象感到困惑。
例如我可以用短数组语法构造它吗?
$this->items = []; //empty object
或者我应该构造为一个Array对象
$this->items = new ArrayObject(); //empty object
我也很困惑我应该如何将新项目推送到数组中。
我有以下功能我写作:
另外我应该如何将arrray对象附加到此对象?
这样好吗?
public function additem($item){
$add = [
'item_id'=>$this->item_id(),
'name'=>$item['name'],
'size',$item['size'],
'quantity'=>$item['quantity'],
'price'=>[
'large'=>$item['price'],
'small'=>$item['price']
]
]
array_push($this->items,$add);
}
或者我应该使用ArrayObject::append()
还是其他方法?
我检查了手册并说明了这一点:
public void ArrayObject::append ( mixed $value )
Appends a new value as the last element.
Note:
This method cannot be called when the ArrayObject was constructed from an object. Use ArrayObject::offsetSet() instead.
来源http://php.net/manual/en/arrayobject.append.php
我现在问这个问题的原因是,稍后当需要从此列表中删除项目时,我将如何找到我正在寻找的内容?我可以在这个对象上使用in_array()
吗?
我提前为这些看似愚蠢的问题道歉,但请记住,我还在学习一些更技术性的东西。谢谢
答案 0 :(得分:2)
您的第一个代码段中没有任何内容需要ArrayObject
。 KISS并使用简单的数组:array_push($this->items,$add);
或$this->items []= $add;
都很好。
作为旁注,代码中的calculateTotal
和add
之间存在差异:您必须决定是否希望item
结构成为数组($item['price']
)或对象($item->price
)。我的建议是使用数组,但这完全取决于你。