添加到具有非类项的类属性的数组

时间:2013-08-16 03:07:03

标签: php arrays oop

以下是一些无效的简单代码。

我宣布一个班级。该类包含一个空数组。然后,在课外我尝试以一种非常简单的方式用一个项目(另一个数组)填充它。

class Order {

public $productArr = array();
function __construct (){

}
}

$order = new Order();

$drumMachine = array('category' => 'musical instrument', 'brand' => 'Emu', 'model' =>      'sp1200');

$order->$productsArr[$drumMachine];

这样做的正确方法是什么? $ drumMachine可能来自$ _SESSION ['cart']但我在这里简化了。

我做了太多的程序编程......!

4 个答案:

答案 0 :(得分:2)

数组键只能是integerstring(参考:Arrays)。您不能将数组作为数组键。

我相信你想要以下内容:

$drumMachine = array('category' => 'musical instrument', 'brand' => 'Emu', 'model' => 'sp1200');
$order->productsArr['drumMachine'] = $drumMachine;

然后您需要访问它的位置:

$order->productsArr['drumMachine']

答案 1 :(得分:2)

您的方法非常不合适,您可能希望通过PHP回归基础并学习一般语法。但是,这就是你要找的东西。

$order->productArr[] = $drumMachine;

您希望直接访问productArr作为属性,不需要$,而且[] =会在数组的END中添加一个新项目

答案 2 :(得分:0)

我相信你想要这个

$order->productsArr = $drumMachine;

但这种方法在设计上很糟糕。好的方法是使用setter和getters方法来访问对象属性。即使它现在看起来过度了。

答案 3 :(得分:0)

您的$drumMachine似乎也是一个对象:

class OrderProduct
{
    public $category;
    public $brand;
    public $model;

    public function __construct($category, $brand, $model)
    {
        $this->category = $category;
        $this->brand = $brand;
        $this->model = $model;
    }
}

$drumMachine = new OrderProduct('musical instrument', 'Emu', 'SP1200');

考虑Order类的以下更改:

class Order {
    private $productArr = array();

    public function addProduct(OrderProduct $product)
    {
        $this->productArr[] = $product;
    }
}

$order = new Order();
$order->addProduct($drumMachine);