2

変数を別の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;

これに対する回避策はありますか?

ありがとうございました

4

1 に答える 1

4

$this->data->$this->iteratorあいまいです。あなたはそのプロパティ$this->dataがの名前$this->iteratorまたはiteratorプロパティを持っていることを意味します$this->data->$thisか?

あなたはそれを明確にする必要があります:

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

同じことが。にも当てはまり$$this->iteratorます。

于 2011-09-02T02:59:56.313 に答える