所以我正在使用bag类,我正在尝试从bag类中动态创建变量。
这就是我所拥有的:
class BagFoo
{
public $a;
public $b;
public $c;
}
class Bar
{
private $bagFoo;
public function output()
{
foreach($this->bagFoo as $key => $value)
{
$$key = $value;
}
//output then happens here.
}
}
这允许我调用$ a而不是我喜欢的$this->bagFoo->getA();
,但问题是我必须公开成员变量来实现它。我想拥有相同的动态变量赋值,但是通过getter访问成员变量,而不是直接访问。
解决方案我虽然并不喜欢:
getVars()
中有一个BagFoo
函数,它将返回一个var名称及其值的数组,然后迭代它。get_class_methods()
然后解析并迭代getter(ew)。我确信有一种方法可以用更优雅的形式做我正在尝试的事情,但我想不出如何实现它。
答案 0 :(得分:0)
如果您只使用关联数组来存储值,那么您的代码可能会更容易理解。
class Bar
{
private $bagFoo = [];
public function __construct($arr)
{
$this->bagFoo = $arr;
foreach($arr as $key => $value)
{
$$key = $value;
}
echo $a; //echos 'aaaa'
}
}
$bar = new Bar([
'a' => 'aaaa',
'b' => 'bbbb',
'c' => 'cccc'
]);
建议提示:使用$$ 要非常小心,因为您可以覆盖当前范围中的变量并导致应用程序中出现各种问题。例如:
$bar = new Bar([
'_SERVER' => 'broken server vars!',
'_COOKIE' => 'broken cookies!',
'arr' => 'broken iterator!',
]);