通过双美元符号访问对象变量

时间:2011-09-02 02:55:08

标签: php class-variables dollar-sign

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

问题是我使用双美元符号才能获得创建$ variable_name => $$ varible_real_value样式hashmap,我希望所有迭代器属性都是类变量。在__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;

有没有解决方法,

谢谢

1 个答案:

答案 0 :(得分:4)

$this->data->$this->iterator含糊不清。您的意思是$this->data的属性$this->iteratoriterator属性$this->data->$this

你需要明确无误:

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

$$this->iterator同样如此。