doqw89029 2011-09-02 02:55
浏览 57
已采纳

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

I'm building a class in order to get variables form another php files conveniently.

Problem is that I'm using double dollar sign in order to get create $variable_name => $$varible_real_value styled hashmap and i want all iterator attributes to be class variables. Defining new variable in __constructor scope might overwrite variables from files. Problematic piece of code is

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

But when i replace it with

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

Variable '$var' will be overwritten.

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;
}

}

Example usage:

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

Is there any workaround for this,

Thank you

  • 写回答

1条回答 默认 最新

  • dsuvs66406 2011-09-02 02:59
    关注

    $this->data->$this->iterator is ambiguous. Do you mean the property of $this->data that has the name of $this->iterator or the iterator property of $this->data->$this?

    You need to make it unambiguous:

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

    The same goes for $$this->iterator.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line