我有一个名为“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对象中获取“名称”。
非常感谢任何帮助。
由于
答案 0 :(得分:2)
你必须这样试试
$foodItem[0]->getName();
因为你的对象在$ foodItem [0]中。然后它会工作。但也有一句话:
答案 1 :(得分:2)
看起来$foodItem
是Food
个对象的数组。
您需要循环遍历数组或通过索引引用特定项目以使用类方法,例如
// 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
}