我有以下具有以下属性的PHP对象:
对象:
- 高级
- 数据
要在PHP中访问它,我必须执行以下操作:
$object->Advanced->Data
现在我想定义一个字符串,其语法如下:
$string = "Advanced->Data";
如何从这里继续使用:
$object->$string = "Something";
最后
$object->Advanced->Data = "Something";
我无法弄清楚使用eval还是$ object-> {$ string}
如果我尝试使用$object->$string
PHP创建了一个名为“Advanced-> Data”的新属性,基本上不解释 - >操作者。
答案 0 :(得分:0)
虽然这是一个黑客,但试试这个,它应该适合您的情况
$arr = array();
$arr['Advanced']['Data'] = 'something';
$string = json_decode(json_encode($arr), 0);
echo $string->Advanced->Data;
答案 1 :(得分:0)
虽然这是一个黑客,但这也可以获取你的愿望
$string = &$object->Advanced->Data;
$string = "here we go";
var_dump($object->Advanced->Data);
答案 2 :(得分:0)
可能eval()不是最佳解决方案,但在您的情况下它可能很有用:
class obj2 {
public $Data = 'test string';
}
class obj1 {
public $Advanced;
public function __construct() {
$this->Advanced = new obj2();
}
}
$test = new obj1();
$string1 = "\$test->Advanced->Data = 'new string';";
$string2 = "\$result = \$test->Advanced->Data;";
eval($string1);
eval($string2);
echo $result . PHP_EOL;
输出将是“新字符串”。
答案 3 :(得分:-1)
试一试后,
$string = "Advanced->Data";
$arr = explode("->",$string);
$temp = $object->{$arr[0]}->$arr[1];
但这是具体情况。如果不是答案,请告诉我你的要求。