在包含数组的PHP对象上调用方法

时间:2011-08-09 04:36:40

标签: php object

我有一个名为“food”的PHP类。该类的内部数据结构是一个数组。

class Food
{


public $dataArray;// = array();
public $sidesArray;// = array();

public function __construct()
{
    $this->dataArray = array();
    $this->sidesArray = array();

    echo"Created new Food instance<br/>";

}

public function setName($food_Name)
{
    $this->dataArray["food_name"] = $food_Name;
}

public function getName()
{
    return $this->dataArray["food_name"];
}

当我调用这个类的方法时:

$food_name = $foodItem->getName();

我得到了这个例外:

Fatal error: Call to a member function getName() on a non-object......

但是当我在对象上调用此函数时:

print_r($foodItem);

我得到了这个输出:

Array ( [0] => Food Object ( [dataArray] => Array ( [food_name] => SimpleXMLElement Object ( [0] => Tomato Soup ) [food_Cals] => SimpleXMLElement Object ( [0] => 200 ) [food_Desc] => SimpleXMLElement Object ( [0] => great ) [food_price] => SimpleXMLElement Object ( [0] => 2.00 ) [num_sides] => SimpleXMLElement Object ( [0] => 1 ) ) [sidesArray] => Array ( [0] => Side Object ( [dataArray:private] => Array ( [side_name] => SimpleXMLElement Object ( [0] => mashed potatoes ) [side_Cals] => SimpleXMLElement Object ( ) [side_Category] => SimpleXMLElement Object ( [0] => Sides ) [side_desc] => SimpleXMLElement Object ( ) [side_price] => SimpleXMLElement Object ( [0] => 2.00 ) ) ) ) ) ) 

我的问题是为什么getName()方法不起作用? 如何从foodItem对象中获取“名称”。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:2)

你必须这样试试

$foodItem[0]->getName();

因为你的对象在$ foodItem [0]中。然后它会工作。但也有一句话:

  • 如果你制作一个set / get方法,你应该将$ dataArray设为私有。如果没有,您可以直接访问它。那不是一个合适的oop。

答案 1 :(得分:2)

看起来$foodItemFood个对象的数组。

您需要循环遍历数组或通过索引引用特定项目以使用类方法,例如

// loop
foreach ($foodItem as $food) {
    echo $food->getName();
}

// direct access
echo $foodItem[0]->getName();

请注意,如果在通过E_NOTICE设置名称之前尝试拨打Food::getName(),则会触发Food::setName()“未定义的索引”错误。

我倾向于在构造函数中设置名称

public function __construct($name)
{
    $this->dataArray = array('food_name' => $name);

    // any other constructor tasks
}