Как получить имя переменной в виде строки в PHP? - PullRequest
185 голосов
/ 01 ноября 2008

Скажите, у меня есть этот код PHP:

$FooBar = "a string";

тогда мне нужна такая функция:

print_var_name($FooBar);

который печатает:

FooBar

Есть идеи, как этого добиться? Возможно ли это даже в PHP?

Ответы [ 22 ]

1 голос
/ 01 ноября 2008

Если переменная взаимозаменяема, у вас должна быть логика где-то , определяющая, какая переменная будет использоваться. Все, что вам нужно сделать, это поместить имя переменной в $variable внутри этой логики, пока вы делаете все остальное.

Я думаю, что нам всем трудно понять, зачем тебе это нужно. Пример кода или объяснение того, что вы на самом деле пытаетесь сделать , может помочь, но я подозреваю, что вы, способ , переосмыслив это.

1 голос
/ 05 августа 2009

У меня есть действительный вариант использования для этого.

У меня есть функция cacheVariable ($ var) (хорошо, у меня есть кэш функции ($ key, $ value), но я хотел бы иметь функцию, как уже упоминалось).

Цель состоит в том, чтобы:

$colour = 'blue';
cacheVariable($colour);

...

// another session

...

$myColour = getCachedVariable('colour');

Я пытался с

function cacheVariable($variable) {
   $key = ${$variable}; // This doesn't help! It only gives 'variable'.
   // do some caching using suitable backend such as apc, memcache or ramdisk
}

Я также пытался с

function varName(&$var) {
   $definedVariables = get_defined_vars();
   $copyOfDefinedVariables = array();
   foreach ($definedVariables as $variable=>$value) {
      $copyOfDefinedVariables[$variable] = $value;
   }
   $oldVar = $var;
   $var = !$var;
   $difference = array_diff_assoc($definedVariables, $copyOfDefinedVariables);
   $var = $oldVar;
   return key(array_slice($difference, 0, 1, true));
}

Но это тоже не получается ...: (

Конечно, я мог бы продолжать делать кеш ('color', $ color), но я ленивый, вы знаете ...;)

Итак, мне нужна функция, которая получает ОРИГИНАЛЬНОЕ имя переменной, как оно было передано функции. Внутри функции я никак не могу это знать, как кажется. Передача get_defined_vars () по ссылке во втором примере выше мне очень помогла (спасибо Жан-Жаку Гугану за эту идею). Последняя функция начала работать, но она все еще продолжала возвращать локальную переменную («переменная», а не «цвет»).

Я еще не пытался использовать get_func_args () и get_func_arg (), $ {} - конструкции и key () вместе, но я полагаю, что это также не удастся.

1 голос
/ 15 июня 2010

У меня есть это:

  debug_echo(array('$query'=>$query, '$nrUsers'=>$nrUsers, '$hdr'=>$hdr));

Я бы предпочел это:

  debug_echo($query, $nrUsers, $hdr);

Существующая функция отображает желтое поле с красным контуром и показывает каждую переменную по имени и значению. Решение для массива работает, но немного запутано для ввода, когда это необходимо.

Это мой вариант использования, и да, это связано с отладкой. Я согласен с теми, кто ставит под сомнение его использование в противном случае.

0 голосов
/ 25 сентября 2014

Вы можете использовать compact () для достижения этой цели.

$FooBar = "a string";

$newArray = compact('FooBar');

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

foreach($newarray as $key => $value) {
    echo $key;
}
0 голосов
/ 24 февраля 2014

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

public function getVarName($var) {      
  $tmp = array($var => '');
  $keys = array_keys($tmp);
  return trim($keys[0]);
}

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

затем мы получаем значение этого ключа с помощью array_keys и возвращаем его.

очевидно, что это быстро запутывается и нежелательно в производственной среде, но это работает для представленной проблемы.

0 голосов
/ 15 ноября 2012

Я искал это, но просто решил ввести имя, у меня все равно обычно есть имя в буфере обмена.

function VarTest($my_var,$my_var_name){
    echo '$'.$my_var_name.': '.$my_var.'<br />';
}

$fruit='apple';
VarTest($fruit,'fruit');
0 голосов
/ 09 июня 2012

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

function get_user_var_defined () 
{
    return array_slice($GLOBALS,8,count($GLOBALS)-8);     
}

function get_var_name ($var) 
{
    $vuser = get_user_var_defined(); 
    foreach($vuser as $key=>$value) 
    {
        if($var===$value) return $key ; 
    }
}
0 голосов
/ 03 мая 2012

почему мы должны использовать глобальные переменные для получения имени переменной ... мы можем использовать просто как показано ниже.

    $variableName = "ajaxmint";

    echo getVarName('$variableName');

    function getVarName($name) {
        return str_replace('$','',$name);
    }
0 голосов
/ 03 апреля 2015

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

использовать имена переменных для ключей массива:

$vars = array('FooBar' => 'a string');

Если вы хотите получить имена переменных, используйте array_keys($vars), он вернет массив тех имен переменных, которые использовались в вашем массиве $vars в качестве ключей.

0 голосов
/ 19 июня 2011

Почему бы вам просто не построить простую функцию и НЕ СКАЗАТЬ?

<code>/**
 * Prints out $obj for debug
 *
 * @param any_type $obj
 * @param (string) $title
 */
function print_all( $obj, $title = false )
{
    print "\n<div style=\"font-family:Arial;\">\n";
    if( $title ) print "<div style=\"background-color:red; color:white; font-size:16px; font-weight:bold; margin:0; padding:10px; text-align:center;\">$title</div>\n";
    print "<pre style=\"background-color:yellow; border:2px solid red; color:black; margin:0; padding:10px;\">\n\n";
    var_export( $obj );
    print "\n\n
\ п \ п "; } print_all ($ aUser, '$ aUser');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...