Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php使用eval获取objects属性值_Php - Fatal编程技术网

php使用eval获取objects属性值

php使用eval获取objects属性值,php,Php,我试图设置一个函数,该函数将动态更新db中的对象属性,而不更新整个对象 $sql = "UPDATE " . self::$table_name . " SET "; $sql .= "$attribute = '" . eval("\$this->$attribute;") . "'"; $sql .= " WHERE ..."; 我似乎无法使用此eval(\$this->$attribute;)生成对象属性值。属性中有一个值,它是公共属性 谢谢 $attribute是一个函数变量,它

我试图设置一个函数,该函数将动态更新db中的对象属性,而不更新整个对象

$sql = "UPDATE " . self::$table_name . " SET ";
$sql .= "$attribute = '" . eval("\$this->$attribute;") . "'";
$sql .= " WHERE ...";
我似乎无法使用此eval(\$this->$attribute;)生成对象属性值。属性中有一个值,它是公共属性

谢谢

$attribute是一个函数变量,它将包含类似“address\u id”的字符串 更新表\u name SET address\u id='11'其中用户\u id='1'
这是一个简单的例子

您不需要使用eval进行此操作。PHP支持变量:

这样做可以:

$this->$attributes
注意第二个
$
符号。这基本上意味着$attributes的值用作属性名称。如果您想让它写得更清楚,可以使用括号:

$this->{$attributes}
如果要使用数组执行此操作,或者如果要使用多个变量生成如下变量名,则需要使用此括号:

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

这可能已经超出了这个问题的范围,但是知道变量是什么很好。但是我不建议使用它们,因为这会使代码变得不可读和难以理解。

您不需要使用eval来完成这项工作。PHP支持变量:

这样做可以:

$this->$attributes
注意第二个
$
符号。这基本上意味着$attributes的值用作属性名称。如果您想让它写得更清楚,可以使用括号:

$this->{$attributes}
如果要使用数组执行此操作,或者如果要使用多个变量生成如下变量名,则需要使用此括号:

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

这可能已经超出了这个问题的范围,但是知道变量是什么很好。但我不建议使用它们,因为这会使代码不可读且难以理解。

没有必要使用
eval()

如果
属性
是一个变量,请使用:

$this->$attribute

您确定
$this->attribute
已正确清除吗

无需使用
eval()

如果
属性
是一个变量,请使用:

$this->$attribute

您确定
$this->attribute
已正确清除吗

为什么需要
eval()
it?当然
$this->attribute
就足够了?为什么首先需要使用eval?为什么不简单地使用$this->attribute?并学习使用预置语句大多数情况下,只要使用
eval()
,您就犯了错误
eval()
几乎总是不必要的。这里当然不需要。$attribute是一个函数变量,尝试过的“$this->attribute”不起作用。但是我尝试了“$sql.=eval”(“return\$this->”“$attribute”“;”);”它成功了。为什么需要
eval()
it?当然
$this->attribute
就足够了?为什么首先需要使用eval?为什么不简单地使用$this->attribute?并学习使用预置语句大多数情况下,只要使用
eval()
,您就犯了错误
eval()
几乎总是不必要的。这里当然不需要。$attribute是一个函数变量,尝试过的“$this->attribute”不起作用。但是我尝试了“$sql.=eval”(“return\$this->”“$attribute”“;”);”它起作用了。我想应该是这样的:“$this->attribute。”如果它是一个变量,就不会。你忘记了concatation的第一个点,那么上面的应该没问题。@BasicBridge BenM没有得到concatation问题,我有,所以我又写了一遍,让他明白你的意思。我认为应该是这样的
”“$this->attribute。”
如果它是一个变量,就不会。你忘记了concatation的第一个点
,那么上面应该没问题。@BasicBridge BenM没有得到concatation问题,我得到了,所以我又写了一遍,让他明白你的意思。