2010-10-21 7 views
1

Je n'ai jamais essayé OO PHP auparavant, j'ai donc décidé de faire un simple CMS pour en savoir plus. J'ai un problème pour charger des valeurs dans un tableau multidimensionnel.Tableaux PHP orientés objet

class Article { 
    private $index = 0; 
    private $article; 

    public function Article() { 
    $get_articles = mysql_query("SELECT * FROM `articles`"); 
    while ($result = mysql_fetch_array($get_articles)) { 
    echo $result["article"]; 

    $this->article[$index]["Tags"] = $result["tags"]; 
    $this->article[$index]["Categories"] = $result["categories"]; 
    $this->article[$index]["Date"] = $result["date"]; 
    $this->article[$index]["Article"] = $result["article"]; 
    $this->article[$index]["URL"] = $result["url"]; 

    $index++; 
    } 
    } 

    public function getArticle($articleID) { 
    return $this->article[$articleID]["Article"]; 
    } 

    public function getTags($articleNumber) { 

    } 

    public function getCategories($articleNumber) { 

    } 

    public function getDate($articleNumber) { 

    } 
} 

La ligne echo $result["article"] émet la seule et unique valeur de l'article mis très bien, mais ne semble pas dans le tableau?

$art = new Article(); 
echo $art->getArticle(0); 

Ceci ne génère cependant pas l'article. Est-ce que quelqu'un pourrait si gentiment souligner mon erreur noob?

+0

Où est 'index' de $ définie dans la Article() 'méthode? – matpie

+0

Il a fait un global, il est sur la première ligne de son code –

+0

Consultez également ArrayObject. – mario

Répondre

5

Vous n'avez pas initialisé votre baie.

$this->article = array(); 

while ($result = mysql_fetch_array($get_articles)) { 
    $this->article[$index] = array(); 
2

Vous devriez probablement définir votre variable $index avant de l'utiliser dans la boucle. Peut-être le définir sur le champ clé primaire que vous avez récupéré de votre requête.

<?php 
$index = $result['id']; 
$this->article[$index]['tags'] = ... 

Vous devez également initialiser la variable membre $article.

<?php 
class Article { 
    private $article = array(); 

Rappelez-vous que vous définissez les variables membres au sein d'une classe à être référencé par $this-> afin que vous aussi ne pas besoin de définir private $index = 0; dans votre définition de classe. Il suffit de le définir à l'intérieur de la méthode.

2

Vous vous remarquerez utilisé $this->article mais pas $this->index si vous voulez garder une trace de la longueur pour la vie de l'objet que vous devrez remplacer $index avec $this->index