PHP функция возвращает значение, вложенный массив удален - PullRequest
0 голосов
/ 07 августа 2009

У меня есть функция, которая создает коллекцию пользовательских объектов из базы данных:

<code>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 "
"; вернуть $ col; }

Метод имеет некоторые выходные данные отладки внизу, но дело в том, что если я вызываю этот метод с нулевым параметром groupid, т.е. он выполняет второе условие, он выводит хорошее указание на коллекцию, которую я ожидал получить, отлично.

Однако ..

Вот мой метод вызова:

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

Интересной вещью является вывод:

  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] => kirsty2@softyolk.com
                            [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] => seb@antithug.co.uk
                            [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 ( ) )

Возвращенный объект был изменен ??

Если метод GetUsersByGroup вызывается с идентификатором userGroupID, то есть в первом случае, все выходные данные будут такими, как ожидается.

Если я удаляю условное выражение из метода и просто возвращаю $col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID);, тогда все выходные данные ожидаются.

Кажется, что условие else выполняется правильно, а затем повреждено при возврате, но это происходит только при наличии условия else, удаляет условие else и просто возвращает результат вызова метода в условии else, и все как и ожидалось.

Есть идеи, пожалуйста?

Спасибо

ДОБАВЛЕНО UserGroup :: GetCollection Метод (хотя это глубокая кроличья нора, хотя, может продолжаться)

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;        
}

Для дальнейшего уточнения следующих работ отлично:

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; 
}

Я вижу проблему только в том случае, если строка находится в блоке else.

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Вероятная проблема здесь заключается в вашей функции UserGroup::GetCollection. PHP 5 передает все объекты по ссылке, поэтому, если вы выполняете какие-либо изменения в этой подпрограмме в зависимости от способа извлечения этих объектов, то это изменение будет сохраняться после завершения UserGroup::GetCollection.

Я бы внимательно изучил различия между этими двумя вызовами функций и убедился, что в UserGroup::GetCollection.

не происходит никаких изменений объектов.
$col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_USERGROUP_MEMBERS,array ($instanceID, $groupID));

против

$col = UserGroup::GetCollection("User" ,_DB_GET_ALL_INSTANCE_NOGROUP_MEMBERS,$instanceID);
0 голосов
/ 08 августа 2009

Оказывается, метод вызывается дважды, второй вызов использует другое условие и возвращает пустую коллекцию (результат проблемы).

Установив эхо в каждом условии, я мог видеть, как они называются, и сначала вызывается нулевой регистр, а затем ненулевой.

Фактическая ошибка в том, что у меня был список состояний, вызывающий метод дважды в одной и той же обратной передаче. Трудно поймать.

Спасибо за внимание

...