2010-04-13 3 views
0

J'essaie de charger des lignes à partir d'une base de données, puis de créer des objets et d'ajouter ces objets à un tableau privé.Le tableau d'objets est vide lorsque je viens d'en extraire un du tableau

Voici mes classes:

<?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]; 
    } 
} 

?> 

Comme vous pouvez le voir, je suis en train de créer un objet stationItem par ligne de base de données (qui, pour a maintenant un code et la description) et je puis pousser ces à la fin de mon tableau qui est détenu comme une variable privée dans stationList.

C'est un code qui crée cette classe et tente d'accéder aux propriétés sur les:

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

Je trouve que le sizeof (stationList $) à la fin du constructeur est 1, mais il est égal à zéro quand nous essayons d'obtenir un objet du tableau en utilisant l'index. Par conséquent, l'erreur que je reçois est:

Erreur fatale: Appel à une fonction membre getCode() sur un non-objet

S'il vous plaît quelqu'un peut me expliquer pourquoi cela se passe? Je suppose que je ne comprends pas comment les références d'objet fonctionnent en PHP5.

Répondre

3

Essayez

$this->stationListing 

dans la classe;)

Pour accéder aux membres de la classe que vous devez toujours utiliser la "magie" $this autoréférence de l'instance en cours . Remarque: Lorsque vous accédez à membres statiques comme cela, vous devez utiliser self:: à la place (ou static:: à partir de PHP 5.3, mais c'est une autre histoire).

1

$stationListing dans le constructeur référence une variable locale, pas celle de votre classe. Changez-le comme suit:

function __construct() { 
... 
$this->stationListing = array(); 
... 
array_push($this->stationListing, $station); 
Questions connexes