【发布时间】:2014-04-25 07:17:26
【问题描述】:
我正在尝试动态地将属性设置为类实例。我写了以下内容:
class MyClass{
public function setProp($prop){
$this->{$prop}=$prop;
}
}
$inst= new MyClass();
$vari='123';
$inst->setProp($vari);
echo $inst->vari;
我预计在 $inst->setProp($vari); 之后方法调用 $inst MyClass 实例具有 vari 字段和 123 值。但事实并非如此。如何解决这个问题?
【问题讨论】:
-
您的
setProp()调用尝试设置名称为123和值123的属性。 -
@hindmost 是否可以设置名称为
vari和值123的属性 -
$vari只是调用setProp()的outside的变量名,在set prop里面,只有一个值123分配给名为$prop的局部变量。 setProp() 甚至不知道值123来自一个变量——它同样可能来自一个常量、类常量、数组元素、硬编码值等......它只是一个接收到的值。它不知道$vari,也不关心 -
@MarkBaker 你的意思是作为函数参数传递的表达式在函数调用自身之前解析吗?
-
传递给 setProp() 的值是参数的 value,无论你是
$vari='123'; $inst->setProp($vari);还是$inst->setProp(123);还是$vari='123'; function($t) { return $t; ) $inst->setProp(function($vari));.... 是的,它在调用 setProp() 之前解决