Ответ 1
С PHP 5.4 можно сделать именно это:
getSomeArray()[2]
Ссылка: https://secure.php.net/manual/en/language.types.array.php#example-62
В PHP 5.3 или более ранней версии вам потребуется использовать временную переменную.
Я использую механизм шаблона, который вставляет код на моем сайте, где я хочу.
Я написал функцию для проверки чего-то, что довольно просто:
myfunction() { return '($this->data["a"]["b"] ? true : false)'; }
Проблема в том, что данные $this- > являются конфиденциальными, и я не могу получить к ней доступ во всех случаях, поэтому мне нужно использовать getData(); что вызывает мою проблему.
$this->getData()['a']['b']
не работает, и присвоение значения сначала не происходит либо потому, что оно будет использоваться непосредственно в блоке if().
Любые идеи?
С PHP 5.4 можно сделать именно это:
getSomeArray()[2]
Ссылка: https://secure.php.net/manual/en/language.types.array.php#example-62
В PHP 5.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()
и сохраните его возвращаемое значение во временной varibaleУ вас нет большого выбора, фактически...
Хорошо... видимо, на самом деле не лучший способ, поэтому я собираюсь ответить на не очень красивое решение:
Я создал функцию:
arrayGet($array, $index) { return $array[$index]; }
И использовал его вот так:
myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' }
Это не очень, но работает.
$this
->data
всегда доступен, если он защищен. $object
->data
недоступен извне, поэтому, если вы возвращаете $this
в свой код, и он оценивается как таковой, он должен быть в порядке.
Btw, в вашем коде есть ошибка: кавычки должны быть экранированы.
myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; }
Это возможно из версии PHP версии 5.4.
Если вам не нужна временная переменная для , а ваша версия PHP меньше, чем 5.4, вы все равно можете использовать несколько встроенных функций для получения первый или последний элемент:
$x = 'first?last';
$first = array_shift(explode('?', $x));
$last = end(explode('?', $x));
$last2 = array_pop(explode('?', $x));
Edit: !!! Обратите внимание, что в более поздних версиях (5.4+) PHP будет вызывать уведомление, потому что end только ожидает переменные как параметр.