2009-08-07 7 views
0

I ont une fonction qui construit un ensemble d'objets d'utilisateur à partir de la base de données:fonction PHP valeur de retour matrice emboîtée enlevé

public static function GetUsersByGroup($instanceID, $groupID) 
{    
    $col = null; 
    if($groupID != null) 
    { 
     $col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_USERGROUP_MEMBERS,array ($instanceID, $groupID)); 
    } 
    else 
    { 
     $col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID); 
    } 
    echo "this is the collection I am going to return: <pre>"; 
    print_r($col); 
    echo "</pre>"; 
    return $col; 
} 

Le procédé a une certaine sortie de débogage vers le bas, mais le point est si j'appelle que méthode avec un paramètre groupid nul, c'est-à-dire qu'il exécute la deuxième condition, il imprime une belle indication de la collection que je m'attendais à recevoir, ce qui est génial.

Cependant ..

Voici ma méthode d'appel:

   echo "<br> Collection passed through is: </br>"; 
      $collection = UserGroup::GetUsersByGroup($this->GetInstance()->id,$grouplist->GetCurrentCommandParam()); 
      print_r($collection); 
      $userlist->UpdateCollection($collection); 
      $userlist->DeSelect(); 

La chose intresting est la sortie:

this is the collection I am going to return: 
Collection Object 
(
    [_valueType:protected] => User 
    [_isBasicType:protected] => 
    [_validateFunc:protected] => 
    [_collection:protected] => Array 
     (
      [0] => User Object 
       (
        [valid] => 
        [validationMessage] => 
        [id] => 29 
        [table:private] => user 
        [fields:private] => Array 
         (
          [title] => mrs 
          [fname] => Kirsty 
          [lname] => Howden 
          [email] => [email protected] 
          [password] => xxxxxxxx 
          [lastlogin] => 2009-07-05 15:20:13 
          [instanceID] => 2 
          [deliveryAddress] => 
          [invoiceAddress] => 
          [tel] => 01752848484 
          [isAdmin] => 0 
          [disabled] => 0 
          [mustAuthorise] => 
          [usergroupID] => 
         ) 

        [validationRules:private] => Array 
         (
         ) 

        [_profileStartTime:protected] => 
        [_profileTag:protected] => 
       ) 

      [1] => User Object 
       (
        [valid] => 
        [validationMessage] => 
        [id] => 31 
        [table:private] => user 
        [fields:private] => Array 
         (
          [title] => master 
          [fname] => Seb 
          [lname] => Howden 
          [email] => [email protected] 
          [password] => xxxxxxxxx 
          [lastlogin] => 2009-07-09 02:02:24 
          [instanceID] => 2 
          [deliveryAddress] => saltash 
          [invoiceAddress] => saltash 
          [tel] => 8908908 
          [isAdmin] => 0 
          [disabled] => 0 
          [mustAuthorise] => 
          [usergroupID] => 
         ) 

        [validationRules:private] => Array 
         (
         ) 

        [_profileStartTime:protected] => 
        [_profileTag:protected] => 
       ) 

     ) 

) 

Collection passed through is: 
this is the collection I am going to return: 
Collection Object 
(
    [_valueType:protected] => User 
    [_isBasicType:protected] => 
    [_validateFunc:protected] => 
    [_collection:protected] => Array 
     (
     ) 

) 
Collection Object ([_valueType:protected] => User [_isBasicType:protected] => [_validateFunc:protected] => [_collection:protected] => Array ()) 

L'objet retourné a été modifié ??

Si la méthode GetUsersByGroup est appelée avec un userGroupID i.e. le premier cas, la sortie est tout comme prévu.

Si je supprime la condition de la méthode et retourne simplement $col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID); alors toute la production est comme prévu.

Il semble que la condition else s'exécute correctement, puis est corrompue en retour, mais cela ne se produit que si la condition else est présente, supprime la condition else, et retourne simplement le résultat de l'appel de méthode dans la condition else, et tout est comme prévu.

Une idée s'il vous plaît?

Merci

LA UserGroup :: AJOUTE GetCollection Méthode (ce qui est un trou de lapin profond cependant, pourrait continuer)

protected static function GetCollection($class, $sqlID, $params = null) 
{ 
    $dal = DAL::GetInstance(); //not to be confused with the Instance object, this is an instance of DAL   

    $collection = new Collection($class); 
    $items = $dal->QueryForAssoc($sqlID,$params); 

    foreach($items as $item) 
    { 
      $itemObject = new $class(); 
      $itemObject->LoadFromList($item); 
      $collection->add($itemObject); 
    } 

    return $collection;   
} 

Pour clarifier davantage les travaux follwing fin ::

public static function GetUsersByGroup($instanceID, $groupID) 
{    
    $col = null; 
    //if($groupID != null) 
    //{ 
     //$col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_USREGROUP_MEMBERS,array ($instanceID, $groupID)); 
    //} 
    //else 
    //{ 
     $col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID); 
    // } 
    return $col; 
} 

Je vois seulement le problème si la ligne est dans le bloc else.

+0

Ce vraiment dépend de la fonction UserGroup :: GetCollection - nous avons besoin de voir que (et peut-être plus) pour pouvoir répondre à la question! – Mez

Répondre

0

Met en oeuvre du procédé est appelé deux fois, le second appel est en utilisant l'autre condition, et le retour d'une collection vide (le résultat du problème).

En définissant un écho dans chaque condition que je pouvais voir comme on les appelle, et d'abord le cas nul est appelé et non nul.

L'erreur réelle est que j'ai eu une liste stateful appelant la méthode deux fois dans le même postback. Difficile à attraper.

Merci pour la recherche

1

Le problème probable réside ici dans votre fonction UserGroup::GetCollection. PHP 5 passe tous les objets par référence, donc si vous faites n'importe quelle sorte de modification dans cette routine en fonction de la façon dont vous récupérez ces objets, alors cette modification persistera après la fin de UserGroup::GetCollection.

j'examiner attentivement les différences entre ces deux appels de fonction et assurez-vous qu'il n'y a pas l'objet change qui se passe dans UserGroup::GetCollection.

$col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_USERGROUP_MEMBERS,array ($instanceID, $groupID)); 

vs.

$col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID); 
Questions connexes