Как получить название переменной в виде строки?

308
15 января 2017, 18:46

Заранее прошу прощения если вопрос кому-то покажется глупым и бессмысленным, но для меня он имеет смысл. Необходима функция которая на входе получает например $var а на выходе выдаёт строку 'var' т.е. имя поданной переменной в строковом виде. Есть какие-то способы это сделать?

Answer 1

Выход только такой:

echo substr('$var',1);

То есть, если не передать переменную в одинарных кавычках, то есть в простой строке, то ничего не выйдет. В двойных кавычках переменная выполнится и вернет значение.

function variable($var) {
    return substr($var, 1);
}
$var1 = '$var';
echo variable($var1); // var

Только вот не знаю к чему это может быть пригодно. Еще можно попробовать функцию get_defined_vars но она выплевывает все.

UPD:

function variable($variable, array $vars) {
    $variable = substr($variable, 1);
    $vars = isset($vars[$variable]) ? $vars[$variable] : 'null';
    return $variable . ' = '. $vars;
}
echo variable('$var', get_defined_vars()); // var = 666

За исключением того, что get_defined_vars работает только с той областью видимости, где была определена - означает, что если определим в функции, то не увидит переменную за областью видимости функции. Смог бы увидеть $GLOBALS, но registr_globals был удален в 5.4, теперь не видит.

Answer 2

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

Способ явно медленный с кучей ограничений, но как пример..

function getVariableName($variable)
{
    $backtrace = debug_backtrace()[0];
    $file = file($backtrace['file']);
    $callLine = $file[$backtrace['line']-1];
    $result = preg_match('/' . __FUNCTION__ . ' *\([^$]*(?P<varName>\$[^ ,)]+) *\)/ui', $callLine, $matches);
    if (!$result) {
        throw new Exception('Fix regexp');
    }
    return $matches['varName'];
}

$foo = 'bar';
$baz = ['Hello', 'World'];
echo getVariableName($foo);
echo PHP_EOL;
echo getVariableName($baz);
// $foo
// $baz

По мотивам ответа на en.SO

READ ALSO
Несколько баз данных Symfony 3

Несколько баз данных Symfony 3

Symfony 3Проект использует основную базу данных

407
Проблема с переменной или функцией

Проблема с переменной или функцией

Это bodyphp Для вывода всех строчек с масива отвечает функция getPosts, она же и задает в ссылке id

282
Синтаксическая ошибка в php: ParseError: &ldquo;syntax error, unexpected &#39;;&#39;&rdquo;

Синтаксическая ошибка в php: ParseError: “syntax error, unexpected ';'”

Пожалуйста подскажите, что означает ошибка:

336
Получение Json и Python (на примере PHP

Получение Json и Python (на примере PHP

Доброго времени сутокРаботаю с VK API, имеется JSON строка с которой мне нужно вытащить кое какие значения

501