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

标签 php class-variables dollar-sign

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

问题是我使用双美元符号来创建 $variable_name => $$variable_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;

有没有解决这个问题的方法

谢谢

最佳答案

$this->data->$this->iterator 不明确。您的意思是 $this->data 的名称为 $this->iterator 的属性还是 iterator 属性$this->数据->$this?

您需要使其明确:

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

$$this->iterator 也是如此。

关于php - 通过双美元符号访问对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278828/

相关文章:

haskell - 封闭括号内的美元符号

javascript - 使用 jQuery 时,何时/为什么要在变量前加上 "$"?

php 返回 500 错误但没有错误日志

php - 将 Symfony 安全和其他模板实用程序与 ReactJS 集成

php - 创建一个基于 AJAX 的聊天系统。如何避免提交内容的页面刷新并实时显示新消息

继承类中的 Ruby 和类变量

r-markdown - 如何转义 $ 以便在 R Markdown 中超链接到它?

php - MySql查询根据价格得到相似的结果

ruby - 类变量和类实例变量之间的区别?

core-data - Swift:类参数作为默认函数参数