在Zend Framework V 1.8中为多个用户(数组)更新表中的字段


Updating a field in a table for multiple users (array) in Zend Framework V 1.8

我有一个user_id数组:

$user_id = Array ();

我想为每个对象创建不同的变量名:

//Something like $this->user_0, $this->user_1, $this->user_2, ...
$i=0;
foreach ($this->user_id as $id){
    $var = 'this->user'.$i;
    $$var = new DatabaseObject_User($db);
    $$var->loadForUser($db, $id);
    $i++;
}

我想要类似于$this->user_0、$this->user_1、$this->user_2的东西,每个对象都有不同的变量。

不要这样做。在尝试迭代和测试这些属性时,您将遇到无尽的麻烦。

只需使用阵列,例如

class Whatever {
    private $user_id = []; // PHP 5.4 syntax, use array() if not applicable
    private $users = [];
    public function loadUsers() {
        foreach ($this->user_id as $id){
            $user = new DatabaseObject_User($db); // dunno where $db comes from
            $user->loadForUser($db, $id);
            $this->users[] = $user;
        }
    }

然后,您可以通过数组索引访问每个用户,例如

$this->users[n]; // where n is some integer; 0 <= n < count($this->users)

或迭代数组

foreach ($this->users as $user) {
    /* @var $user DatabaseObject_User */
}

不知道为什么你希望它们是单独的变量,而不仅仅是存储一个用户数组,但我认为你正在寻找这个:

$i=0;
foreach ($this->user_id as $id){
    $var = 'user'.$i;
    $this->$var = new DatabaseObject_User($db);
    $this->$var->loadForUser($db, $id);
    $i++;
}

请记住,动态声明类属性通常是个坏主意。这些财产是否存在并自动公开并不明显。您可能需要考虑只使用$users类属性。