Селектор массива php не уверен в разнице

привет, я работаю с Drupal, и он использует массивы на уровне, с которым я не очень знаком, у меня есть быстрый вопрос, в чем разница между этими «селекторами» (это правильный термин)?

Это вызывает ошибку «Неустранимая ошибка: невозможно использовать объект типа stdClass в качестве массива в…».

$node['field_geoloc'] 

это работает (я использую его в выражении if != null)

$node->field_geoloc

надеюсь, простой вопрос... спасибо.


person Purplemonkey    schedule 02.09.2011    source источник


Ответы (4)


Довольно просто .. ошибка говорит сама за себя:

"Неустранимая ошибка: невозможно использовать объект типа stdClass в качестве массива в..."

Вы пытаетесь использовать объект как массив.

Свойства объекта недоступны с использованием метода $array['key'], к которому вы привыкли. Вам необходимо получить доступ к таким свойствам, как:

`$object->property`

Если у вас есть объект, вы можете получить свойства из этого массива с помощью get_object_vars. Но я знаю по опыту, что вы не должны использовать этот метод с $node в Drupal.

person Layke    schedule 02.09.2011
comment
правильно ли я думаю, что => наоборот, изменить / вставить значение в свойство объекта. - person mintuz; 30.06.2012

-> — это оператор для доступа к общедоступным свойствам объекта (и вызова общедоступных методов). Для доступа к свойствам объекта с синтаксисом $object['key'] он должен реализовать ArrayAccess. Другой вариант - привести объект к массиву ( $node = (array) $node (но это будет работать только для ключей первого уровня, например, он превратит $node->page в $node['page'], но не $node->page->title в $node['page']['title'] - более поздние будут доступны через $node['page']->title

person Maxim Krizhanovsky    schedule 02.09.2011

Потому что вы не можете использовать объект как массив.

Первый — это массив, а второй — объект.

person genesis    schedule 02.09.2011

Первый — массив, второй — объект (класса StdClass). Но вас может заинтересовать этот интерфейс: http://php.net/manual/en/class.arrayaccess.php, который позволяет получить доступ к объекту как к массиву (поэтому вы делаете $obj['key'] вместо $obj->key)

person ItalyPaleAle    schedule 02.09.2011