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

时间:2013-12-11 01:56:26

标签: php variables zend-framework foreach

我有一个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,每个对象的不同变量。

2 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分:0)

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

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

请记住,动态声明类属性通常是个坏主意。这些属性存在并且它们会自动公开并不明显。您可能只想考虑使用$users类属性。