За последние 24 часа нас посетили 71747 программистов и 10288 роботов. Сейчас ищут 2795 программистов ...

можно ли получить имена переменных, переданных функции?

Тема в разделе "Прочие вопросы по PHP", создана пользователем bm13kk, 8 май 2011.

  1. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    я к тому что ты в своей погоне за упрощением написал уже чуть ли не больше текста чем все эти переменные вместе взятые. =)

    выгода от твоих усилий сейчас стремительно бежит к нулю.
     
  2. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.333
    Симпатии:
    44
    Ваша задача решается через Reflection
     
  3. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    функция собирает все свои названия и значения переданных аргументов в двумерный ассоциативный массив.

    PHP:
    1. <?php
    2.  
    3. #описываем переменные
    4.  
    5. $ss = 'hello';
    6. $s3s = 234;
    7. $erdd = array(13,'world','mixedmass'=>'mixedval', array(333,444));
    8.  
    9. #сабж
    10.  
    11. function myFunk() {
    12.     $p = debug_backtrace();
    13.     foreach ($p[0]['args'] as $pp) {
    14.         $s = array_keys($GLOBALS ,$pp);
    15.         $ret[$s[0]] = $pp;
    16.     }
    17.     return $ret;
    18. }
    19.  
    20. # демонстрация
    21.  
    22. print '<pre>';
    23. $z = myFunk($ss, $s3s, $erdd);
    24. print var_dump($z);
    Код (Text):
    1. array(3) {
    2.   ["ss"]=>
    3.   string(5) "hello"
    4.   ["s3s"]=>
    5.   int(234)
    6.   ["erdd"]=>
    7.   array(4) {
    8.     [0]=>
    9.     int(13)
    10.     [1]=>
    11.     string(5) "world"
    12.     ["mixedmass"]=>
    13.     string(8) "mixedval"
    14.     [2]=>
    15.     array(2) {
    16.       [0]=>
    17.       int(333)
    18.       [1]=>
    19.       int(444)
    20.     }
    21.   }
    22. }
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    вместо того, чтобы учиться ходить, ты предлагаешь использовать костыли?
     
  5. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    теоритически получать имена переменных никогда не нужно.
    Именно поэтому создали php не предусмотрели инструментов для извлечения их имен.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    какое страшное слово, за 3,5 года изучения PHP ни разу ни в одной системе не встречал
     
  7. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.333
    Симпатии:
    44
    Reflection - это как раз тот самый "предусмотренный" инструмент.
     
  8. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.333
    Симпатии:
    44
    Ну потому что оно нужно не всем. Чаще - разработчикам крупных систем и фреймворков. Например, Yii позволяет позволяет определить действие контроллера как actionName($var) и $var будет взят из запроса $_GET['var'] (и исключение, если его там нет). Zend да и другие фреймворки, которые поддерживают генерацию автоматическую WSDL для SOAP-а на основе интерфейса класса работают с названиями методов класса, их параметрами и phpdoc-ом для определения типа переменных. Ну много еще разных фишек, которые, как правило, не нужны тем, кто просто фигачит код.