使用类成员的内容作为变量名

时间:2011-07-27 23:08:45

标签: php dynamic

我尝试使用类成员的内容来访问方法变量:

protected function method() {
    $var1 = 'no';
    $var2 = 'no';

    if ($this->data['x']['y'] != 'bums') {
        $$this->data['x']['y'] = 'yes';

        ${$this->data['x']['y']} = 'yes';
    }
}
在这种情况下,

$this->data['x']['y']可以包含 var1 var2 的内容。
但为什么我不能用这种方式来访问方法变量?

2 个答案:

答案 0 :(得分:2)

使用$$无论如何都是一种糟糕且不安全的做法:

将代码更改为:

会更好
protected function method() {
    $var1 = 'no';
    $var2 = 'no';

    switch ($this->data['x']['y']) {
       case 'var1':
           $var1 = 'yes';
           break;
       case 'var2':
           $var2 = 'yes';
           break;
    }
}

HTH,Andreas

答案 1 :(得分:1)

变量变量可能存在安全风险。即使你检查它们,也没有必要打开另一个你可以犯错的矢量。相反,使用数组,无论如何它们都更容易理解和清洁。

protected function method() {
    $var = array(
        1 => 'no',
        2 => 'no',
    );

    if ($this->data['x']['y'] != 'bums') {
        $var[$this->data['x']['y']] = 'yes';
    }
}