php使用eval获取对象属性值

时间:2013-02-14 14:11:55

标签: php

我正在尝试设置一个函数,它将动态更新数据库中的对象属性,而无需更新整个对象。

$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . eval("\$this->$attribute;") . "'";
$sql .= " WHERE ...";

我似乎无法获得此 eval(“\ $ this-> $ attribute;”)来生成对象属性值。属性中有一个值,它是一个公共属性。

由于

$ attribute是一个函数var,它将包含像'address_id'这样的字符串,所以我想要      UPDATE table_name SET address_id = '11'WHERE user_id ='1' 这是一个简单的例子

2 个答案:

答案 0 :(得分:2)

您不需要使用eval执行此操作。 PHP支持变量变量:http://php.net/manual/en/language.variables.variable.php

所以这样做:

$this->$attributes

请注意第二个$符号。这基本上意味着$ attributes的值用作属性名称。如果你想让它更清晰一些,你可以使用括号来表达:

$this->{$attributes}

如果您想使用数组执行此操作,或者如果您想使用多个变量来构建如下变量名称,则需要此括号:

$this->{$var1}_{$array[0]}_{$var2}

这可能落后于这个问题的范围,但知道变量变量是什么很好。但我不建议使用它们,因为它使代码难以理解且难以理解。

答案 1 :(得分:1)

无需使用eval()

$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . $this->attribute . "'";
$sql .= " WHERE ...";

如果attribute是变量,请使用:

$this->$attribute

您确定$this->attribute是否已正确消毒?