何时使用ArrayObject而不是Array

时间:2014-08-19 05:40:15

标签: php arrays arrayobject

我想知道何时使用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()吗?

我提前为这些看似愚蠢的问题道歉,但请记住,我还在学习一些更技术性的东西。谢谢

1 个答案:

答案 0 :(得分:2)

您的第一个代码段中没有任何内容需要ArrayObject。 KISS并使用简单的数组:array_push($this->items,$add);$this->items []= $add;都很好。

作为旁注,代码中的calculateTotaladd之间存在差异:您必须决定是否希望item结构成为数组($item['price'] )或对象($item->price)。我的建议是使用数组,但这完全取决于你。