Как я могу получить имя переменной переменной? - PullRequest
1 голос
/ 31 мая 2011

Итак, мне нужно фактическое имя переменной " varName " из глобального пространства. Эта функция на самом деле является методом внутри класса.

Код для простоты произвольный

$varName = 'what ever';

public function save($var)
{
    $i[varName goes here] = $var;
}

Я не знаю, возможно ли это вообще, но я думаю, может быть с обратным вызовом?

Ответы [ 4 ]

1 голос
/ 31 мая 2011

Читайте о $GLOBALS переменная в документации .

Это, вероятно, то, что вам нужно. В зависимости от того, как вы определяете, какая переменная вам нужна, вы можете, например, пользователь array_search() найти правильное имя на основе значения.

Внимание: $GLOBALS относится к переменным глобальной области видимости.

EDIT:

Но это все еще будет предположение. Вы можете попробовать следующий метод, чтобы определить имя переданной переменной с ~ 100% достоверностью:

  1. Передать переменную методу со ссылкой.
  2. Используйте array_search() для поиска имени переменной. Если ему соответствует только один ключ, у вас есть ваше имя. Если нет, перейдите к следующему шагу.
  3. Сохраните начальное значение переменной и сохраните список позиций, в которых вы нашли соответствующие элементы.
  4. Измените значение переменной на новое. Выполните другой поиск на основе нового значения и получите позиции, которые также находятся в списке позиций из точки №. 3.
  5. На данный момент вы, вероятно, нашли имя переменной, которую вы ищете.

Но ...

Это действительно нужно? Я предлагаю вам поискать более простое решение, более совершенную инкапсуляцию вашего кода.

Ps. array_search() фактически возвращает не более одного ключа ( см. Документацию ). Вы должны это знать и сделать поиск по нескольким результатам немного более сложным, чтобы не пропустить правильный, если более чем одна переменная соответствует вашим критериям поиска. ( EDIT2: Как и предполагал Марио, array_intersect($GLOBALS, array($var)) будет достаточно)

1 голос
/ 31 мая 2011

Если это глобальная переменная, вы можете узнать оригинальное имя с помощью:

$varname = array_search($var, $GLOBALS);

Но это не слишком надежно; лучшее предположение. Если две глобальные переменные будут содержать одно и то же значение, вы просто получите имя любой из них.

0 голосов
/ 31 мая 2011

Спасибо за решение!Вот мой тест:

<?php
$varName = 'what ever';

function save($var)
{
    $i[array_search($var, $GLOBALS)] = $var;
    print_r($i);
}
save($varName);
?>

отпечатки:

Array
(
    [varName] => what ever
)
0 голосов
/ 31 мая 2011

В C вы бы использовали макрос.Я не думаю, что в PHP есть эквивалент.

Вы можете передать имя переменной в функцию в виде строки, а затем в функции получить значение переменной из GLOBALS или eval это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...