Селектор массива php не уверен в различии - PullRequest
0 голосов
/ 02 сентября 2011

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

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

$node['field_geoloc'] 

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

$node->field_geoloc

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

Ответы [ 4 ]

2 голосов
/ 02 сентября 2011

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

2 голосов
/ 02 сентября 2011

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

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

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

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

`$object->property`

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

1 голос
/ 02 сентября 2011

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

Это первое - массив, а второе - объект.

0 голосов
/ 02 сентября 2011

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

...