【问题标题】:Accessing object variable via double dollar sign通过双美元符号访问对象变量
【发布时间】:2011-11-08 21:07:11
【问题描述】:

我正在构建一个类,以便方便地从另一个 php 文件中获取变量。

问题是我使用双美元符号来创建 $variable_name => $$varible_real_value 样式的哈希图,并且我希望所有迭代器属性都是类变量。在 __constructor 范围内定义新变量可能会覆盖文件中的变量。有问题的代码是

foreach($this->args AS $this->iterator) {
    $this->data->$this->iterator = $$this->iterator;
}  

但是当我用

替换它时
foreach($this->args AS $var) {
    $this->data->$var = $$var;
}  

变量“$var”将被覆盖。

class DataFile {

private
    $data = null,
    $iterator = null,
    $args = null
;

public function __construct($file) {
    require($file);
    unset($file);
    $this->args = func_get_args();
    array_shift($this->args);
    $this->data = new ArrayObject();
        foreach($this->args AS $this->iterator) {
            $this->data->$this->iterator = $$this->iterator;
        }    
}

public function __get($key) {
    return $this->data->$key;
}

}

示例用法:

$conf = new DataFile('mysql.php', 'var');
$databaseName = $conf->var->database;

有没有办法解决这个问题,

谢谢

【问题讨论】:

  • $this->data->$this o_O 你的意思可能是$this->data->{$this->iterator}

标签: php class-variables dollar-sign


【解决方案1】:

$this->data->$this->iterator 不明确。你是指$this->data 的属性名称为$this->iterator 还是$this->data->$thisiterator 属性?

你需要让它明确:

$this->data->{$this->iterator}

$$this->iterator 也是如此。

【讨论】:

  • 非常感谢,正是我想要的。不知道 {} 可以使用双美元符号:${$this->iterator};
猜你喜欢
  • 2019-01-26
  • 2010-11-30
  • 2022-07-28
  • 2016-07-10
  • 2012-09-05
  • 2011-01-06
  • 2011-12-17
相关资源
最近更新 更多