PHP, извлекающий значения массива с помощью стрелки стрелки "->"
Я уже давно использую 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 все больше и больше, я сталкиваюсь с проблемами, когда мне нужно изменить способ получения этого значения.
Имеет ли это смысл? Я очень признателен за любую помощь.
Благодаря,
Грег
Ответы
Ответ 1
Как указано ранее в других ответах, использование ->
означает, что вы обращаетесь к объекту, а не к массиву.
Однако иногда возможно, что объект будет рассматриваться как массив. Это когда он реализует ArrayAccess
интерфейс. Кодер может делать так, например. вызов $object->field
будет эквивалентен $object['field']
, но он/она не должен.
Кроме того, можно рассматривать массив как объект (см. в руководстве), однако в этом случае это не массив но объект и тот же путь, что и выше.
Ответ 2
Переменные, которые позволяют получить свойства с помощью ->
, на самом деле являются объектами, а не массивами. Они позволяют синтаксис ['some_key']
, но это не значит, что они являются массивами. Они не.
Вы можете прочитать больше об объектах на этой странице руководства по PHP.
Ответ 3
Это не массивы, они объекты.
Ответ 4
Это потому, что это не массив, это переменная объектов.
Например:
class MyObject{
var $myVariable = 'test';
}
$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'