Как получить доступ к динамическому свойству объекта? - PullRequest
1 голос
/ 10 апреля 2019

Я преобразую массив как объект и пытаюсь получить доступ к ключу (или свойству), но он не работает. Код ниже возвращает type 8 -- Undefined property: stdClass::$2. Я попытался использовать property_exists(), но это также не удалось.

$var = (object)array('1' => 'Object one','2' => 'Object two');
$num = "2";
var_dump( $var->$num );

Кто-нибудь знает почему?

ОБНОВЛЕНИЕ: Это кажется проблемой независимо от того, являются ли свойства строками или целыми числами.

1 Ответ

1 голос
/ 10 апреля 2019

Это не будет работать в PHP <7.2.0, и проблема в том, что строковые целочисленные ключи массива фактически преобразуются в целочисленные имена свойств, а не строки. Альтернативный способ получить объект из массива, который будет работать: </p>

$var = json_decode(json_encode(array('1' => 'Object one','2' => 'Object two')));
$num = "2";
var_dump( $var->$num );

См. Демоверсию , в PHP <7.2.0 приведение <code>(object) преобразуется в целочисленные свойства, но json_decode создает свойства строки.

...