Вызов метода для объекта PHP, который содержит массив - PullRequest
1 голос
/ 09 августа 2011

У меня есть класс PHP под названием "еда". Внутренняя структура данных класса - Array.

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 ]

2 голосов
/ 09 августа 2011

Похоже, $foodItem - это массив Food объектов.

Вам нужно будет перебирать массив или ссылаться на определенные элементы по индексу, чтобы использовать методы класса, например,

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

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

Будьте осторожны, так как вы будете вызывать ошибку E_NOTICE "undefined index" при попытке вызвать Food::getName() до того, как имя будет установлено с помощью Food::setName().

Я был бы склонен установитьимя в конструкторе

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

    // any other constructor tasks
}
2 голосов
/ 09 августа 2011

Вы должны попробовать это таким образом

$foodItem[0]->getName();

потому что ваш объект находится в $ foodItem [0]. Тогда это будет работать. Но также замечание:

  • если вы делаете метод set / get, вы должны сделать $ dataArray приватным. Если нет, вы можете получить к нему доступ напрямую. Это не правильный упс.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...