【问题标题】:PHP - Accessing a object property from dynamic variablePHP - 从动态变量访问对象属性
【发布时间】:2017-07-05 02:44:56
【问题描述】:

我正在寻找访问这样的对象的对象属性的属性:

$property = "user->name";
echo $object->$property; // ??, I want $object->user->name

我尝试了很多东西,但似乎都没有。

谢谢

【问题讨论】:

  • 什么??你能简单解释一下..展示你的对象
  • 我不认为这是重复的,我不能按照建议使用 XPath,因为这不是 XML,我不能直接访问我想要的。为了回答 M A SIDDIQUI,我需要存储一个对象的属性,如图所示 ($property),并在 $object 对象上重用这个变量。

标签: php oop


【解决方案1】:

我认为您不能以这种方式进行多次取消引用。您将在$object 中寻找一个名为user->name 的变量。相反,您可以按-> 拆分,然后拨打多个电话,例如:

$test = 'user->name';
$val = $object;
foreach(explode('->', $test) as $item) {
  $val = $val->$item;
}
echo $val;   # This is the result of $object->user->name

Sample Code

【讨论】:

  • 第一个“$var”不应该是“$val”吗? .除此之外,这个原始语句在我的代码中有效: echo $json_dump->geometry[6]->obs[2]->hayabusa2->delay_from;但是我无法通过将“geometry[6]->obs[2]->hayabusa2->delay_from”分配给 $test 并使用您的代码来“模拟”它,我收到错误“注意:未定义的属性:stdClass::$geometry[ 6] "
【解决方案2】:

尝试以下方法:

$property = "user->name";

$prop_arr = explode('->',$property);
foreach ($prop_arr as $prop){
    $obj = $obj->{$prop};
}
echo $obj;

【讨论】:

    【解决方案3】:

    如果您像这样将变量分成 2:

        list($property1, $property2) = explode('->', $property);
    
        echo $object->{$property1}->{$property2}; 
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      相关资源
      最近更新 更多