我正在构建一个类,以便方便地从另一个 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/