2010-12-18 2 views
0

Je n'arrive pas à comprendre cela. J'ai créé une classe simple qui renvoie un tableau de tableaux. Voici le constructeur de classe ...Impossible d'accéder aux membres du groupe

class BlogComments { 
public $commentArray=array(); 
public $blogId; 

function __construct($inId) { 
    if(!empty($inId)) { 
     $this->blogId=$inId; 
     $sql="select id,name,url,comment,email from blog_comment where blog_id=$inId"; 
     $link2=GetConnection(); 
     $query=mysql_query($sql,$link2) or die("Invalid blog id:".mysql_error()); 
     while($row=mysql_fetch_array($query)) { 
      $this->commentArray=array(
       "id"=>$row['id'], 
       "name"=>$row['name'], 
       "url"=>$row['url'], 
       "email"=>$row['email'], 
       "comment"=>$row['comment'] 
      ); 
     } 
     mysql_close($link2); 
    } 
} 
} 

J'essaie d'accéder à chaque membre du tableau via une boucle. Il entre dans la boucle mais les valeurs renvoyées sont vides. J'ai vérifié que les données sont écrites dans le tableau. Voici mon code ...

include "include/commentclass.php"; 
$comments = new BlogComments($post->id); 
foreach($comments as $comment) { 
    echo "<h4>".$comment->commentArray['name']."</h4> 
     <a href=\"".$comment->commentArray['url']."\">".$comment->commentArray['url']."</a> 
     <p>".$comment->commentArray['comment']."</p>"; 
} 

Fondamentalement, il renvoie des balises vides. J'ai également vérifié que $ post-> id détient une valeur valide. Des idées de ce que je fais mal?

Merci pour l'aide, B

+0

Vous ne pouvez pas itérer sur l'objet Référence. Comme le dit Netcoder dans sa réponse, vous devez implémenter Traversable afin de le faire. Ou simplement implémenter une méthode dans votre classe qui vous donnera le $ commentArray. – Andreas

Répondre

0

Essayez ceci:

$comments = new BlogComments($post->id); 
foreach ($comments->commentArray as $comment) { 
    echo "<h4>".$comment['name']."</h4> 
     <a href=\"".$comment['url']."\">".$comment['url']."</a> 
     <p>".$comment['comment']."</p>"; 
} 

Le mot-clé new retourne un seul objet. À moins que votre objet (BlogComments) implémente Traversable, foreach agira sur les propriétés publiques commentArray et blogId, et non sur le contenu commentArray.

Vous pouvez également demander à votre classe de mettre en œuvre une interface Iterator.

+0

Vous avez tous les deux raison. J'aimerais pouvoir donner la réponse aux deux. – bflemi3

1

Vous faites quelques erreurs, la première est celle qui a été signalée par netcoder: vous utilisez l'objet comme un tableau sans implémenter une interface Iterator. La seconde est que vous affectez directement le tableau de résultats à $this->commentArray. Vous devez ajouter le résultat au tableau de cette façon: $this->commentArray[] = array(

+0

Vous avez tous les deux raison. J'avais besoin d'ajouter le résultat au tableau comme vous l'avez dit et en utilisant le code de netcoders, j'ai réussi à faire fonctionner les deux. Merci à vous deux! – bflemi3

+0

+1 @Minkiele: Bon appel, je n'ai pas vu le '[]' manquant là. – netcoder

Questions connexes