ОК, я разобрался с вами :) Это было интересно.
Во-первых, вы не инициализировали свойство status. Так что в теории этого должно было быть достаточно:
$u->status = new StdClass;
Однако это сложнее, чем это. Даже если вы это сделаете, это не сработает. Это потому, что вы устанавливаете свои поля в массиве данных, но оттуда вы никогда не ПОЛУЧИТЕ ИХ!
Таким образом, когда вы получаете доступ к полю ($ u-> status), вы НЕ берете поле, которое вы только что установили: вы получаете доступ к незаданному свойству объекта. Если вы попытаетесь напечатать $ u-> name после установки, вы ничего не получите, потому что вы не создали функцию получения, которая считывала бы ваш массив данных.
Вам следует либо создать метод получения, либо удалить его (он все равно будет работать, но может оказаться не тем, что вам нужно).
Если вы закомментируете сеттер, все работает без предупреждений. Смотрите эту упрощенную версию:
<?php
error_reporting(E_STRICT);
class User
{
}
$u = new User();
$u->name = "James Smith";
$u->status = new StdClass; // Comment this line and you will get the strict warning
$u->status->active = false;
var_dump($u);