Массив объектов пуст, когда я пришел, чтобы получить один из массива - PullRequest
0 голосов
/ 13 апреля 2010

Я пытаюсь загрузить строки из базы данных, а затем создать объекты из них и добавить эти объекты в частный массив.

Вот мои занятия:

<?php

include("databaseconnect.php");

class stationItem {
    private $code = '';
    private $description = '';


    public function setCode($code ){
        $this->code = $code;
    }

    public function getCode(){
        return $this->code;
    }

    public function setDescription($description){
        $this->description = $description;
    }

    public function getDescription(){
        return $this->description;
    }

}


class stationList {
    private $stationListing;

    function __construct() {
        connect();
        $stationListing = array();

        $result = mysql_query('SELECT * FROM stations');

        while ($row = mysql_fetch_assoc($result)) {
            $station = new stationItem();
            $station->setCode($row['code']);
            $station->setDescription($row['description']);

            array_push($stationListing, $station);
        }
        mysql_free_result($result);
    }


   public function getStation($index){
        return $stationListing[$index];
   }
}

?>

Как вы видите, я создаю объект stationItem для каждой строки базы данных (которая на данный момент имеет код и описание), а затем помещаю их в конец моего массива, который хранится в качестве закрытой переменной в stationList. *

Это код, который создает эти классы и пытается получить к ним доступ к свойствам:

$stations = new stationList();
$station = $stations->getStation(0);
echo $station->getCode();

Я обнаружил, что sizeof ($ stationList) в конце конструктора равен 1, но затем он равен нулю, когда мы пытаемся получить объект из массива с помощью индекса. Поэтому ошибка, которую я получаю:

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

Пожалуйста, кто-нибудь может объяснить мне, почему это происходит? Наверное, я неправильно понимаю, как ссылки на объекты работают в PHP5.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2010

Попробуйте

$this->stationListing

внутри класса;)

Чтобы получить доступ к ученикам, вы всегда должны использовать «магическую» $this собственную ссылку на текущий экземпляр . Примечание. При доступе к статическим элементам , таким образом, вместо этого необходимо использовать self:: (или static::, начиная с PHP 5.3, но это уже другая история).

1 голос
/ 13 апреля 2010

$stationListing в конструкторе ссылается на локальную переменную, а не на переменную в вашем классе. Измените его на следующее:

function __construct() {
...
$this->stationListing = array();
...
array_push($this->stationListing, $station);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...