Получить PHP свойство вложенного класса по строке - PullRequest
0 голосов
/ 06 марта 2020

Я читал в этом посте Получите PHP свойство класса по строке , что я могу получить доступ к свойству с помощью переменной типа - echo $ obj -> $ prop. Однако моя проблема немного отличается, и я не могу найти правильный ответ для вложенного свойства. В приведенном примере показан уровень 1. Мне нужно что-то, что может работать на 1 или более уровней. Мне нужно получить динамический доступ к «состоянию» с помощью переменной.

$str = '{
  "health" : {
    "status" : "UP"
  }
  "db" : {
     "postgres" : {
        "status" : "UP"
     }
  }
  "disk" : {
    "status" : "UP"
  }
}';
$healthcheck = "health->status";

или

$dbcheck = "disk->status";

или в некоторых случаях

$dbcheck = "db->postgres->status"

или в другие случаи

$dbcheck = "db->postgres[0]->status"

И я надеюсь использовать приведенные выше строки для динамического доступа к значениям.

Но мой код ниже дает сбой:

$obj = json_decode( $str );
echo $obj->$healthcheck;
PHP Notice:  Undefined property: stdClass::$health->status

I знаю, что структура json существует, я просто не нахожу правильный способ доступа к подэлементу.

Если я попробую его как оригинальный пост и изменим

// $healthcheck = "health->status";
$healthcheck = "health";
print_r( $obj->$healthcheck );

, он будет работать хорошо. Очевидно, я использую print_r (), так как «health» - это объект, а «print» или «echo» не будет печатать объект.

stdClass Object
(
    [status] => UP
)

Как получить доступ к вложенным свойствам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...