За последние 24 часа нас посетили 16187 программистов и 1553 робота. Сейчас ищут 923 программиста ...

Как получить имя переменной?

Тема в разделе "PHP для новичков", создана пользователем yasaleen, 10 фев 2011.

  1. yasaleen

    yasaleen Активный пользователь

    С нами с:
    28 янв 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    ДВ
    Кто знает, существует ли функция или магическая константа, для получения имени переменной в коде?
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    глаза подойдут?
     
  3. yasaleen

    yasaleen Активный пользователь

    С нами с:
    28 янв 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    ДВ
    Спасибо, Ваши глаза мне пока не потребуются.

    Интересует как получить имя в процессе исполнения кода?
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    yasaleen
    контекст не ясен. пример кода в студию
     
  5. yasaleen

    yasaleen Активный пользователь

    С нами с:
    28 янв 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    ДВ
    такого примера будет достаточно? :)
    PHP:
    1.  
    2. $name = 'value';
    3. echo 'value: ' . $name; //Вывод значения.
    4.                                   //А как вывести имя?
    5.  
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    для этого пользуются ассоциативными массивами

    $array = array();
    $array['name'] = 'Gromo';

    foreach($array as $key=>$value){
    echo "$key: $value";
    }
     
  7. yasaleen

    yasaleen Активный пользователь

    С нами с:
    28 янв 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    ДВ
    Нет, это не то что нужно. Читайте внимательней вопрос, пожалуйста.
     
  8. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    PHP:
    1. <?php
    2.  $name  = "var";
    3.  $$name = "val";
    4.  echo $var;
    5. ?>
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    yasaleen
    ИМХО, ты сам плохо представляешь себе что такое переменная - это просто ссылка на участок памяти с данными.
    на один и тот же участок памяти могут ссылаться две переменные с разными именами, и какое имя по твоему должна выводить функция?!
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я тоже хотел бы иногда выводить имя переменной. Т.е. к переменной по имени обратиться можно. А узнать имя - низя. При чем пхп хранит именно имена переменных, для того, чтобы работали всякие фокусы...
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Gromo
    Не, ты просто не представляешь, что такое дебажить var_dump'ом в файл. =))

    Была у меня функция:
    PHP:
    1.  
    2. <?php
    3. function logVar($name, $var, $return=false, $type='debug', $masPar=null){
    4.         ob_start();
    5.             var_dump($var);
    6.         $msg=ob_get_clean();
    7.         if ($return) return $name." => ".$msg;
    8.         else logMsg($name." => ".$msg, $type, 'var', $masPar);
    9.     }
    10.  
    и естественно я все время забывал дать имя переменной, и хорошо если это простой тип, а если массив?:
    Код (Text):
    1. logVar($maArray);
    и приходилось исправлять эту строку и снова дебажить.
    Мне это надоело и я поменял параметры местами:
    Код (Text):
    1. function logVar($var, $name='par',  $return=false, $type='debug', $masPar=null){
    но все равно хочется магии...

    кстати, то что "переменная - это просто ссылка на участок памяти с данными" я забыл после того как перестал работать с C. Т.е. я знаю., но в повседневной работе это как-то не особо нужно.

    Ну и, "какое имя должна выводить функция?" - вопрос вполне решаемый. Например, все в виде массива.
     
  12. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Опа...
    А ларчик то просто открывался....
    Ща попробую...

    UPD:
    но как и следовало ожидать - не все так просто...
    PHP:
    1.     <?php
    2. function varLog($var_vdp, $name=null, $return=false, $type='debug', $masPar=null){
    3.         ob_start();
    4.             var_dump($var_vdp);
    5.         $msg=ob_get_clean();
    6.         if(!$name){
    7.             logVar(varDeepFind($var_vdp));
    8.         }
    9.         if ($return) return $name." => ".$msg;
    10.         else logMsg($name." => ".$msg, $type, 'var', $masPar);
    11.     }
    12.    
    13.     function varDeepFind($var_vdp, $mas=null){
    14.         if(is_null($mas)) $mas=$GLOBALS;
    15.         $rez=null;
    16.         foreach($mas as $k=>$v_vdp){
    17.             if($k=='GLOBALS') continue;
    18.             if ($v_vdp===$var_vdp){
    19.                 $rez[]=$k;
    20.             }elseif (is_array($v_vdp)){
    21.                 if($find=varDeepFind($var_vdp, $v_vdp)){
    22.                     $rez[$k]=$find;
    23.                 }
    24.             }
    25.         }
    26.         return $rez;
    27.     }
    28.  
    Кое что конечно находит, но:
    1)Если несколько переменных имеют одно и тоже значении (или являются ссылками), то найдет все.
    2)Нужно еще обрабатывать массив с результатом.
    3)Не работает с переменными функций.
    4)Не учитываются объекты.
     
  14. MariaDB

    MariaDB Новичок

    С нами с:
    21 апр 2015
    Сообщения:
    1
    Симпатии:
    0
    Если переменные рассматриваются как поля класса , то нет проблем с выводом их имен как на экран так и в логи.
    Код (Text):
    1.  
    2. //создаем  класс...
    3. class MyClass
    4. {
    5.         public $UserName;
    6.         public $UserLogin;
    7.  
    8.   //.....какой-то конструктор и прочие методы....
    9. }
    10.            $User = new myClass($Name,$Login);
    11.            print('<pre>');
    12.            print_r(Get_Class_Vars($User));
    на выходе получим ассоциативный массив как имя => значение.

    Этот метод очень удобен в том случае , если Вы применяете ООП подход к разработке ( процедурный подход остался далеко в прошлом ) .
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    MariaDB,
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА