Существует ли способ получить название переменной? PHP - Отражение

Редактирование: Видел ответы, отправленные, в то время как я писал, Хеш [a.flatten] кажется способом пойти. Должно быть, пропустил тот бит в документации, когда я продумывал ответ. Мысль решения, которые я записал, может использоваться в качестве альтернатив при необходимости.

вторая форма более проста:

a = [[:apple, 1], [:banana, 2]]
h = a.inject({}) { |r, i| r[i.first] = i.last; r }

= массив, h = хеш, r = хеш возвращаемого значения (тот мы накапливаемся в), я = объект в массиве

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

a = [:apple, 1, :banana, 2]
h = {}
a.each_slice(2) { |i| h[i.first] = i.last }
12
задан Petruza 13 August 2009 в 13:41
поделиться

5 ответов

Нет, невозможно. Извините.

4
ответ дан 2 December 2019 в 05:55
поделиться

Не элегантно ... НО ВЫ МОЖЕТЕ СДЕЛАТЬ ЭТО !

  • 1) Выпейте достаточно, чтобы убедить себя, что это хорошая идея (это займет много времени)
  • 2) Замените все свои переменные переменными переменными:
 $ a = 10
// становится
$ a = '0a';
$$ a = 10;
  • 3) Ссылка на $$ a во всем вашем коде.
  • 4) Когда вам нужно распечатать переменную, выведите $ a и вычеркните начальный 0.

Дополнение: делайте это только в том случае, если вы

  • ] Никогда не показывать этот код никому
  • Никогда не нужно изменять или поддерживать этот код
  • Сумасшедшие
  • Не делаю этого для работы
  • Послушайте, просто никогда не делайте этого, это шутка
2
ответ дан 2 December 2019 в 05:55
поделиться

У меня была такая же мысль раньше, но если вы действительно думаете об этом, вы ' Я пойму, почему это невозможно ... предположительно ваша функция debug будет определена следующим образом: function debug ($ someVar) {} , и у нее нет возможности узнать, что исходная переменная была называется $ myvar .

Лучшее, что вы могли бы сделать, это посмотреть что-то вроде get_defined_vars () или $ _ GLOBALS (если бы это был глобальный по какой-то причине) и прокрутите это, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.

Лучшее, что вы могли бы сделать, - это посмотреть что-то вроде get_defined_vars () или $ _ GLOBALS (если он был глобальным по какой-то причине) и пролистать его, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.

Лучшее, что вы могли бы сделать, - это посмотреть что-то вроде get_defined_vars () или $ _ GLOBALS (если он был глобальным по какой-то причине) и пролистать его, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.

2
ответ дан 2 December 2019 в 05:55
поделиться

Нет, чем ближе вы будете get - это get_defined_vars ().

EDIT : Я был неправ, после прочтения комментариев пользователя к get_defined_vars () это возможно с помощью небольшого хака:

function ev($variable){
    foreach($GLOBALS as $key => $value){
        if($variable===$value){
            echo '<p>$'.$key.' - '.$value.'</p>';
        }
    }
}

$lol = 123;

ev($lol); // $lol - 123

Работает только для уникального содержимого переменных хотя.

2
ответ дан 2 December 2019 в 05:55
поделиться

Вы можете использовать eval:

function debug($variablename)
{
  echo ($variablename . ":<br/>");
  eval("global $". $variablename . ";");
  eval("var_dump($" . $variablename . ");");
}

Использование: debug ("myvar") not debug ($ myvar)

0
ответ дан 2 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

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