инициализация массива php - PullRequest
3 голосов
/ 26 ноября 2009

Мне нужно инициализировать массив объектов в PHP. В настоящее время у меня есть следующий код:

$comment = array();

И когда я добавляю элемент в массив

public function addComment($c){
    array_push($this->comment,$c);
}

Здесь $c является объектом класса Comment.

Но когда я пытаюсь получить доступ к функциям этого класса, используя $comment, я получаю следующую ошибку:

Неустранимая ошибка: вызов функции-члена getCommentString () для необъекта

Может кто-нибудь сказать мне, как инициализировать массив объектов в php?

Спасибо Sharmi

Ответы [ 4 ]

3 голосов
/ 26 ноября 2009
$this->comment = array();
2 голосов
/ 27 ноября 2009

Похоже, проблема масштаба для меня.

Если $comments является членом класса, вызов $comments внутри функции этого класса не будет фактически использовать член, а скорее будет использовать экземпляр $comments, принадлежащий области действия функции. *

Если другими словами, если вы пытаетесь использовать члена класса, делайте $this->comments, а не просто $comments.

class foo
{
    private $bar;

    function add_to_bar($param)
    {
        // Adds to a $bar that exists solely inside this
        // add_to_bar() function.
        $bar[] = $param;

        // Adds to a $bar variable that belongs to the
        // class, not just the add_to_bar() function.
        $this->bar[] = $param;
    }
}
0 голосов
/ 27 ноября 2009

Вы можете увидеть, что находится в массиве, передав его print_r():

print_r($comment);

Если у вас есть Comment объектов, вы сможете ссылаться на них с помощью $comment[0]->getCommentString().

0 голосов
/ 26 ноября 2009

Этот код может вам помочь:

$comments = array();
$comments[] = new ObjectName(); // adds first object to the array
$comments[] = new ObjectName(); // adds second object to the array

// To access the objects you need to use the index of the array
// So you can do this:
echo $comments[0]->getCommentString(); // first object
echo $comments[1]->getCommentString(); // second object

// or loop through them
foreach ($comments as $comment) {
    echo $comment->getCommentString();
}

Я думаю, что ваша проблема в том, как вы добавляете объекты в массив (на что ссылается $ this-> comment?), Или вы пытаетесь вызвать -> getCommentString () для массива, а не для фактического объекты в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...