Гамбо прав, вот рабочий пример:
<?php
class Test
{
public $arr = array();
public $obj = null;
}
$a = new Test();
$a->arr[]->foo = 1234;
$a->arr[]->bar = 'test';
var_dump( $a->arr );
// even more weird on null objects
$a->obj->foobar = 'obj was null!';
var_dump( $a->obj );
возвращается:
array(2) {
[0]=>
object(stdClass)#2 (1) {
["foo"]=>
int(1234)
}
[1]=>
object(stdClass)#3 (1) {
["bar"]=>
string(4) "test"
}
}
object(stdClass)#4 (1) {
["foobar"]=>
string(13) "obj was null!"
}
edit: Хорошо, я нашел что-то связанное в руководстве по php по этому поводу:
Если объект преобразован в объект, он не изменяется. Если значение любого другого типа преобразуется в объект, создается новый экземпляр встроенного класса stdClass. Если значение было NULL, новый экземпляр будет пустым. ( источник )
Таким образом, использование синтаксиса ->
преобразует вещь в объект. В приведенном выше примере $obj
равен null , поэтому создается новый пустой экземпляр и устанавливается элемент foobar
.
При рассмотрении примера массива arr[]
сначала создает новый (пустой) элемент массива, который затем преобразуется в пустой объект из-за синтаксиса ->
и устанавливается переменная-член.