php
  • variables
  • object
  • append
  • 2010-09-21 7 views 0 likes 
    0

    j'ai cet objet:objet append à un autre objet en php

    foreach(range(1,$oc->num_users) as $num) { 
        $user = 'user' . $num; 
        $$user = mysql_fetch_object(mysql_query("SELECT user".$num.", user".$num."_ready, FROM oc_db WHERE leader='".$_SESSION['username']."' ")); 
    

    Cela donne des objets nommés user1..X

    plus tard, j'ont une fonction Simular comme celui-ci, où je l'utilise $$user->$user qui représentent un nom d'utilisateur pour se connecter à la base de données pour obtenir des informations supplémentaires.

    $$user = mysql_fetch_object(mysql_query("SELECT x, y, z FROM user_db WHERE username='".$$user->$user."' ")); 
    

    Cela fait aussi des objets nommés user1..X, mais au lieu de remplacer l'objet créé plus tôt, je veux ajouter ces valeurs à l'objet que j'ai créé dans la première fonction. $$user est le nom des objets. Je voudrais faire quelque chose comme $$user .= fetch_object dans la dernière fonction, mais bien sûr ce n'est pas si simple.

    +1

    Avez-vous envisagé d'utiliser des tableaux? '$ user [1..x] ['stuff']', '$ user [1..x] ['otherstuff']' – fredley

    +0

    Et ce n'est pas la seule sonnerie d'alarme qui sonne. Par exemple. envoyer une requête structurellement identique à l'exception de l'utilisateur. $ num partie par ligne que vous voulez récupérer est ... suboptimal. Et même avoir '$ oc-> num_users' ... oui, pourrait l'être, mais pourrait aussi être inutile, peut-être même sujet aux erreurs. Peut-être que vous devriez décrire le problème que vous voulez résoudre et demander une solution bonne/efficace. – VolkerK

    Répondre

    1

    Pour ajouter un objet à un autre il vous suffit de parcourir le premier objet puis attribuer à chaque propriété que vous trouverez à la seconde:

    $tmp = mysql_fetch_object(mysql_query("SELECT x, y, z FROM user_db WHERE username='".$$user->$user."' ")); 
    
    foreach ($tmp as $key => $value) { 
        $$user->$key = $value; 
    } 
    
    0

    En quelques apartés, si vous essayez pour accéder à la propriété user de l'objet, alors vous devez utiliser $$user->user, car $$user->$user va essayer d'accéder à une propriété numérotée (par exemple pour l'objet $user12, vous essayez d'accéder à $user12->user12). J'envisagerais également d'utiliser un tableau, comme suggéré par Freddy (c'est-à-dire utiliser $user[$num] au lieu de $user = 'user'.$num).

    Pour aborder votre question initiale, au lieu d'utiliser l'opérateur d'affectation de concaténation .=, vous pouvez essayer d'ajouter une méthode à votre classe user, comme append, puis l'utiliser pour ajouter l'objet récupéré à votre objet courant comme $user->append(fetch_object(...));. Dans la méthode append, vous pouvez définir vos propres règles pour la manière dont un objet récupéré est ajouté à votre objet utilisateur actuel.

    Questions connexes