我有一个从数据库构建用户对象集合的函数:

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

该方法在底部有一些调试输出,但是要点是,如果我用空的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 ( ) )

返回的对象已被修改?

如果使用userGroupID(即第一种情况)调用GetUsersByGroup方法,则输出全部符合预期。

如果我从该方法中删除条件,然后简单地返回$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块中,我只会看到问题。

#1楼 票数:1

这里可能的问题在于您的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);

#2楼 票数:0 已采纳

原来方法被调用两次,第二次调用使用其他条件,并返回一个空白集合(问题结果)。

通过在每种情况下设置回显,可以看到它们被调用的情况,首先调用null情况,然后调用non null。

实际的错误是我有一个有状态列表在同一回发中两次调用了该方法。 很难抓住。

谢谢看

  ask by Gavin translate from so

未解决问题?本站智能推荐:

1回复

截断的双精度值(php)

我正在研究如何用角度更新图像并发送后台请求(PHP)的HTTP请求,因此一切正常,它删除了旧文件并插入了新文件,但是问题是当将数据插入到文件中时数据库显示错误。 这是我尝试插入一个简单示例进行测试时的错误 错误更新etservice设置nom_service ='trompit
1回复

SQL Server:在php中查询时XML被截断

从SQL Server数据库查询xml数据时,它返回截断的xml。 $db = DB::get(); $db->exec('SET ANSI_NULLS ON'); $db->exec('SET ANSI_PADDING ON'); $db->exec('SET ANSI_
1回复

php,exec,sort命令,输出文件“出现”被截断,但输入文件未完全读取到EOF

当我使用php exec('sort /var/www/website/file_in.txt -o /var/www/website/file_out.txt'); 从sort命令输出的文件被截断 输入文件大小= 2,442,541 输出文件大小= 1,146,881
1回复

如何通过Ajax将Base64解码数据发送到php文件

我想从ajax将base64解码的数据发送到php文件,但是我一半的数据被截断,无法通过ajax将整个数据发送到php文件。 我正在发送此data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAJACAYAAABlmtk2AAAgAElEQ…
2回复

PHP函数不返回值

我有一个返回值的递归函数。 似乎当$ referrer为零时,它不会返回任何值,但会回显'xxxxxxx'。 问题可能是什么!
1回复

PHP电子邮件脚本-每当我添加id?=文本后,它就会被截短2个字母

我正在使用Ionic创建Mobile App。 在应用程序中,我为丢失密码功能编写了一些逻辑。 用户可以在其中有1个电子邮件字段,可以在其中添加其注册电子邮件并获得一些链接来重置其密码。 请检查下面的代码 在=(等于)符号后,我要添加$ email变量,该变量将用户变量检查到DB中
4回复

PHP函数不返回值

我有一个函数,给定一个文件名和目录路径,检查目录是否已经包含一个具有相同名称的文件,如果是这样,则返回一个修改过的文件名(通过在文件名的第一部分后附加一个数字)。 (get_filenames()函数是一个CodeIgniter帮助函数,它创建一个包含指定目录中所有文件名的数组。) 当我
2回复

PHP函数未从多维数组返回值

我一直在开发一个调色板系统,其中多维数组包含不同的调色板。 例如: 我有一个函数,当被调用时应该返回一个调色板项,但是由于某种原因它什么也没返回。 而是显示“未定义的变量:调色板” EX: 有什么建议么?