2009-10-21 14 views
1

Je vous écris cette classe de commentaire:PHP Variables variables

class Comment { 

    public $id; 
    public $post_id; 
    public $name; 
    public $email; 
    public $website; 
    public $body; 
    public $date; 
    public $ip_address; 
    public $status; 

    function __construct($id) { 

     global $db; 

     $resc = $db->query("SELECT * FROM blog_comments WHERE id='$id' LIMIT 1"); 

     while($row = $db->fetch_assoc($resc)) { 
      while ($comment = current($row)) { 
       $key = key($row); 
       $this->$key = $comment{$key}; 
       next($row); 
      } 
     } 
    } 
} 

Voici ce que la requête dans le constructeur sera de retour lorsqu'il est exécuté dans la base de données:

query results http://17webshop.com/wp-content/uploads/2009/10/Picture-2.png

Mais quand je le lance , c'est ce que print_r (nouveau Comment (1)); crache:

Comment Object 
(
    [id] => 1 
    [post_id] => 1 
    [name] => J 
    [email] => j 
    [website] => h 
    [body] => b 
    [date] => 1 
    [ip_address] => : 
    [status] => 1 
) 

Des idées pour lesquelles je ne reçois que le premier caractère de chaque champ?

Merci.

+0

Étiez-vous un programmeur Perl, par hasard? – outis

Répondre

3

courant/suivant est douloureux, et je ne suis pas sûr de ce qui se passe avec le {} déréférencement.

Pourquoi ne pas simplement:

$resc = $db->query("SELECT * FROM blog_comments WHERE id='$id' LIMIT 1"); 

while($row = $db->fetch_assoc($resc)) { 
    foreach($row as $key=>$value){ 
     $this->$key = $value; 
    } 
} 
+0

vous savez, je me suis toujours demandé quelle était la différence entre [] et {}. Je vous remercie. et oui, cette solution est excellente. – seventeen

+0

Voir la réponse de mike B, qui est vraiment une réponse plus concise. Je pensais que {} choisirait un seul personnage, mais était trop paresseux pour le rechercher. – timdev

+0

Voici la référence: http://www.php.net/manual/fr/language.types.string.php#language.types.string.substr – outis

6

Vous voulez

$comment[$key] 

commentaire $ {$ key} vous donnera le nième caractère d'une chaîne. Puisque $ key lui-même est une chaîne, PHP convertit cela en entier 0 et vous obtenez le premier caractère.

+0

La valeur entière de ces clés est 0, qui est aussi l'index de le premier caractère d'une chaîne. – outis

+0

Oups, bonne prise –

2

Je pense que vous devez modifier cette ligne:

$this->$key = $comment{$key}; 

avec:

$this->$key = $comment[$key];