PHP将字符串转换为对象子子变量

时间:2017-01-17 12:11:13

标签: php

我有以下具有以下属性的PHP对象:
对象:
- 高级
- 数据
要在PHP中访问它,我必须执行以下操作:

$object->Advanced->Data

现在我想定义一个字符串,其语法如下:

$string = "Advanced->Data";  

如何从这里继续使用:

$object->$string = "Something";  

最后

$object->Advanced->Data = "Something";

我无法弄清楚使用eval还是$ object-> {$ string} 如果我尝试使用$object->$string PHP创建了一个名为“Advanced-> Data”的新属性,基本上不解释 - >操作者。

4 个答案:

答案 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];

但这是具体情况。如果不是答案,请告诉我你的要求。