syamskoy
@syamskoy

Объект Шрёдингера: откуда берется Trying to get property 'type' of non-object?

Ошибка выскакивает тут, на 125й строке:

125:        if ($work->category->type == Category::TYPE_URGENT_WORK) {
126:            $this->doSomething();
127:        }


Сама ошибка: Trying to get property 'type' of non-object

Добавляю строкой выше:
get_class($work->category); - выводит common/model/Category
Добавляю еще:
print_r($work->category->type); - выводит 2, все ок.
Добавляю:
var_dump($work->category); - как и полагается выводит объект с данными Category.

Откуда же берется Trying to get property 'type' of non-object ?? Что за магия такая?

Пробовал так:
$t = $work->category->type;
if ($t == 2) {
}


И опять ошибка, и ссылается на строку if() !! Wtf?
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
@Arik
Наверно в цикле запускаете этот код? список каких то моделей? С вашей проверкой вы проверяете только первый объект, а остальные ниже нет. Чтоб поймать кота:
if (!$work->category) {
print_r($work);
}


Обычно проверяю свойство перед:
if ($work->category && $work->category->type == Category::TYPE_URGENT_WORK) {
// ...
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
может, ленивая загрузка.. попробуйте

$work->getCategory()
Ответ написан
kimono
@kimono
Web developer
Связи в каком-то конкретно случае может и не быть, так что в любом случае не помешает "лишняя проверка":
125:        if ($work->category && $work->category->type == Category::TYPE_URGENT_WORK) {
126:            $this->doSomething();
127:        }

ну, или захардкорить:
125:        if ($work->category instanceof Category && $work->category->type == Category::TYPE_URGENT_WORK) {
126:            $this->doSomething();
127:        }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы