@Deric

Как правильно инициализировать многомерный объект stdClass?

Добрый день.
Разбираясь с объектами PHP в том числе наткнулся на возможность создания динамических объектов используя предопределенный класс stdClass():
$std = new stdClass();
Так же мною был обнаружен такой пример инициализации динамического объекта:
$std = new stdClass();
$std->first = 1;
$std->second->third = 3;
print_R($std);
?>
stdClass Object
(
    [first] => 1
    [second] => stdClass Object
        (
            [third] => 3
        )
)

Этот пример демонстрирует возможность создания "многомерного" объекта, по принципу соответствующего массива.
Однако попытка использовать данный код в рамках изучаемого мною фреймворка Laravel 4.1 всегда приводит к ошибке:
Creating default object from empty value
Со ссылкой на неверное выражение:
$std->second->third = 3;
Так возможно ли создавать многомерные динамические объекты? Или может просто в Laravel`е есть какие-то недопонимания с такого рода объектом. Но если просто создать "одномерный" объект stdClass, то всё работает нормально.
Спасибо за помощь.
  • Вопрос задан
  • 3521 просмотр
Пригласить эксперта
Ответы на вопрос 1
gillbeits
@gillbeits
На самом деле ты получаешь не ошибку, а Warning, и так и должно быть, т.к. это ломает логику приложений и ООП в частности. Правильнее всегда задавать структуру и ее наследовать, по крайней мере в будущем, когда наступит момент рефакторинга кода, ты всегда сможешь найти нужные свойства и их расширить.

А пример рабочий с выключенным уровнем ошибок:
<?php
error_reporting(error_reporting() & ~E_WARNING);
$std = new stdClass();
$std->first = new stdClass();
$std->first->third = 3;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы