Значение переменной массива переменных PHP

Мне нужно использовать имена переменных для проекта, над которым я работаю, но столкнулся с немного странной проблемой. Имя функции заканчивается как строковый элемент в массиве.

Это работает:

$func = $request[2];
$pages->$func();

Это не означает:

$pages->$request[2]();

И я не могу понять, почему. Он выдает массив для строковой ошибки преобразования, как если бы он игнорировал, что я предоставил ключ к определенному элементу. Является ли это тем, как это работает, или я делаю что-то неправильно?

php,arrays,

6

Ответов: 1


6 голосов принято

Что касается php 5 , вы можете использовать синтаксис с фигурными привязками:

$pages->{$request[2]}();

Простой пример для воспроизведения:

<?php

$request = [
    2 => 'test'
];

class Pages
{
    function test()
    {
        return 1;
    }
}

$pages = new Pages();

echo $pages->{$request[2]}();

Альтернативно (как вы отметили в вопросе):

$methodName = $request[2];
$pages->$methodName();

Цитата из php.net для php 7 case:

Косвенный доступ к переменным, свойствам и методам теперь будет оцениваться строго в порядке слева направо, в отличие от предыдущего сочетания особых случаев.

Также есть таблица для разностей php 5 и php 7 для этого вопроса чуть ниже цитаты в документах, которые я здесь привел.

Какие вещи вы должны учитывать:

  • Проверить значение $request[2]( действительно ли это строка ? ).
  • Проверьте свою версию php ( это php 5+ или php 7+ ? ).
  • Ознакомьтесь с руководством по функциям переменной для вашего выпуска.
PHP, массивы,