Я уже давно использую PHP, но никогда не был продвинутым программистом. Я чувствую, что это глупый вопрос, но не понял, почему некоторые значения массива могут быть получены с использованием разных методов:
Эта:
$array->value
а не нормальный:
$array['value']
Стандартный $ array ['value'] всегда работает, но тот, который использует метод ->, не время от времени. Почему это?
Вот пример. Я использую Zend Framework 2, и я могу захватить значение сеанса с помощью метода ->:
$this->session->some_value
Однако я не могу, если я делаю новый, нормальный массив:
$array = array('some_value' => 'myvalue'); $array['some_value']; // works!! $array->some_value; // does not work :(
В Zend Framework 1 большинство массивов будут работать нормально, а в ZF2 все больше и больше, я сталкиваюсь с проблемами, когда мне нужно изменить способ получения этого значения. Имеет ли это смысл? Я очень признателен за любую помощь. Спасибо, Грег
Как указывалось ранее в других ответах, использование ->
означает, что вы обращаетесь к объекту, а не к массиву.
Однако иногда возможно, что объект будет рассматриваться как массив. Это когда он реализует интерфейс ArrayAccess
. Кодер может делать так, например. вызов $object->field
будет эквивалентен $object['field']
, но он / она не должен.
Более того, можно рассматривать массив как объект (см. Руководство ), однако в этом случае это не массив, а объект и тот же путь, что и выше.
Переменные, которые позволяют вам получать свойства с помощью ->
, на самом деле являются объектами, а не массивами. Они позволяют синтаксис ['some_key']
, но это не значит, что они являются массивами. Они не.
Вы можете больше узнать об объектах на этой странице руководства PHP .
Это не массивы, они – объекты .
Это потому, что это не массив, это переменная объектов.
Например;
class MyObject{ var $myVariable = 'test'; } $MyObject = new MyObject(); echo $MyObject->myVariable; // Would return 'test'