【问题标题】:PHP dynamic variable creation via a getter通过 getter 创建 PHP 动态变量
【发布时间】:2014-05-27 05:44:24
【问题描述】:

所以我正在使用包类,并且我正在尝试从包类动态创建变量。

这是我所拥有的:

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 访问成员变量,而不是直接访问。

我想过但不太喜欢的解决方案:

  1. BagFoo 中有一个 getVars() 函数,该函数将返回一个 var 名称及其值的数组,然后对其进行迭代。
  2. 调用 get_class_methods(),然后解析并遍历 getter (ew)。

我确信有一种方法可以以更优雅的形式来做我正在尝试的事情,但我就是想不出如何实现它。

【问题讨论】:

标签: php dynamic reflection


【解决方案1】:

如果您只使用关联数组来存储您的值,您的代码可能会更容易理解。

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!',
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多