我尝试使用类成员的内容来访问方法变量:
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 的内容。
但为什么我不能用这种方式来访问方法变量?
答案 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';
}
}