Массив доступа, возвращенный функцией в php

Кассини не поддерживает виртуальные каталоги

88
задан enyo 8 August 2014 в 15:29
поделиться

3 ответа

Вы не можете использовать что-то вроде этого:

$this->getData()['a']['b']

т.е. синтаксис доступа к массиву не возможен непосредственно при вызове функции.

Вы должны использовать некоторую временную переменную , например:

$tmp = $this->getData();
$tmp['a']['b']    // use $tmp, now

В вашем случае это, вероятно, означает использование чего-то вроде этого:

function myfunction() {
  $tmp = $this->getData();
  return ($tmp['a']['b'] ? true : false);
}

Вы должны:

  • сначала вызвать метод getData () и сохранить его результат. значение во временной переменной
  • , тогда используйте эту временную переменную для своего теста

У вас нет особого выбора, на самом деле ...

16
ответ дан 24 November 2019 в 07:33
поделиться

Хорошо ... видимо, лучшего способа нет, поэтому я отвечу сам с не очень красивым решением:

Я создал функцию:

arrayGet($array, $index) { return $array[$index]; }

И использовал ее так:

myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' }

Это некрасиво, но работает.

12
ответ дан 24 November 2019 в 07:33
поделиться

$ this -> данные всегда доступны, если они защищены. $ object -> data недоступен отовсюду, поэтому, если вы возвращаете $ this в своем коде, и он оценивается как таковой, все должно быть в порядке.

Между прочим, в вашем коде есть ошибка: кавычки нужно экранировать.

myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; }
1
ответ дан 24 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: