PHP, извлекающий значения массива с помощью стрелки стрелки "->" - программирование
Подтвердить что ты не робот

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 все больше и больше, я сталкиваюсь с проблемами, когда мне нужно изменить способ получения этого значения. Имеет ли это смысл? Я очень признателен за любую помощь. Благодаря, Грег

4b9b3361

Ответ 1

Как указано ранее в других ответах, использование -> означает, что вы обращаетесь к объекту, а не к массиву.

Однако иногда возможно, что объект будет рассматриваться как массив. Это когда он реализует ArrayAccess интерфейс. Кодер может делать так, например. вызов $object->field будет эквивалентен $object['field'], но он/она не должен.

Кроме того, можно рассматривать массив как объект (см. в руководстве), однако в этом случае это не массив но объект и тот же путь, что и выше.

Ответ 2

Переменные, которые позволяют получить свойства с помощью ->, на самом деле являются объектами, а не массивами. Они позволяют синтаксис ['some_key'], но это не значит, что они являются массивами. Они не.

Вы можете прочитать больше об объектах на этой странице руководства по PHP.

Ответ 4

Это потому, что это не массив, это переменная объектов.

Например:

class MyObject{

   var $myVariable = 'test';

}

$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'