Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как узнать название переменной в функции


Автор: Валерия 10.11.2008, 18:48
Банальный вопрос.
Код

function test(&$var){
 echo "Значение переменной " . 
 //Вот здесь нужно вывести my
 . "равно $var";
}

$my = "123";
test($my);

Автор: Endeveit 10.11.2008, 19:42
http://ru2.php.net/manual/en/language.variables.php#49997

Автор: skyboy 11.11.2008, 00:33
где-то уже спрашивали подобное. невозможно подобное.

Автор: Endeveit 11.11.2008, 00:48
skyboy, можете проследовать по моей ссылке дабы убедиться в обратном.

Автор: skyboy 11.11.2008, 01:04
Endeveit, интересно, что вернет приведенная функция в ответ на
Код

function test(&$var){
 echo "Значение переменной " . 
 //Вот здесь нужно вывести my
 . "равно $var";
}
$my = "123";
$my2= &$my;
test($my2);

Автор: Endeveit 11.11.2008, 01:14
Мне кажется вполне очевидным, что она выведет "my2".
Будете придумывать очередные бессмысленные примеры, или примете тот факт, что функция свою работу выполняет?

Автор: skyboy 11.11.2008, 01:42
Endeveit, приму.

Автор: skyboy 11.11.2008, 02:05
однако, за одной оговоркой: get_defined_vars возвращает результат http://ua2.php.net/manual/en/function.get-defined-vars.php#86475.
так что
Код

<?php
  function vname(&$var, $scope=false, $prefix='unique', $suffix='value')
  {
    if($scope) $vals = $scope;
    else      $vals = $GLOBALS;
    $old = $var;
    $var = $new = $prefix.rand().$suffix;
    $vname = FALSE;
    foreach($vals as $key => $val) {
      if($val === $new) $vname = $key;
    }
    $var = $old;
    return $vname;
  }
  function my_local_func()
  {
    $my_local_variable = "My local string.";
    $my_second= &$my_local_variable;
    return vname($my_local_variable, get_defined_vars());
  }
  echo my_local_func();
?>

у меня возвращает "my_second".
как и 
Код

<?php
  function vname(&$var, $scope=false, $prefix='unique', $suffix='value')
  {
    if($scope) $vals = $scope;
    else      $vals = $GLOBALS;
    $old = $var;
    $var = $new = $prefix.rand().$suffix;
    $vname = FALSE;
    foreach($vals as $key => $val) {
      if($val === $new) $vname = $key;
    }
    $var = $old;
    return $vname;
  }
    $my_global_variable = "My local string.";
    $my_second= &$my_global_variable;
    echo vname($my_global_variable);
?>

а так - да. примеры бесполезные,а функция - абсолютно работоспособная.

Добавлено через 35 секунд
впрочем, подход в любом случае достаточно интересен. таки зря мало внимания обращал на коменты в мануале.

Автор: skyboy 11.11.2008, 10:33
Цитата(skyboy @  11.11.2008,  01:05 Найти цитируемый пост)
get_defined_vars возвращает результат не по ссылке

нет, глупости говорю.
дело не в ссылках/не-ссылках, а в том, что две переменные ссылаются на одно значение.
потому и через $GLOBALS метод не работает. так?

Автор: Endeveit 11.11.2008, 11:27
Ага.

Автор: skyboy 11.11.2008, 11:58
Валерия, тебе для отладки - вывести значение некой переменной?

Добавлено через 50 секунд
Цитата(Endeveit @  11.11.2008,  10:27 Найти цитируемый пост)
Ага. 

так все-таки, выводит функция имя переменной, которая была передана в функцию, или нет? smile

Автор: Endeveit 11.11.2008, 14:00
Цитата(skyboy @  11.11.2008,  12:58 Найти цитируемый пост)
так все-таки, выводит функция имя переменной, которая была передана в функцию, или нет?

Выводит, но с некоторыми оговорками, о которых Вы сами написали выше ;)
И, да, топикстартеру на зметку: эту функцию стоит использовать только в режиме отладки.

Автор: Валерия 11.11.2008, 20:40
Цитата(skyboy @  11.11.2008,  11:58 Найти цитируемый пост)
тебе для отладки - вывести значение некой переменной?

Мне не значение переменной, а значение названия переменной которую подставили в функцию)

Endeveit, Спасибо smile

Автор: skyboy 11.11.2008, 22:06
Цитата(Валерия @  11.11.2008,  19:40 Найти цитируемый пост)
Мне не значение переменной, а значение названия переменной которую подставили в функцию)

зачем конкретно? 

Автор: Валерия 13.11.2008, 15:44
Цитата(skyboy @  11.11.2008,  22:06 Найти цитируемый пост)
зачем конкретно?

Пишу функцию которая будет вытягывать с $_POST или $_GETзначение и фильтровать его
что бы писать не
my_get("var", $var, "post", "string");
а
my_get($var, "post", "string");

далее, если post то $_POST, get соотвественно $_GET 
если "string" то mysql_real_escape_string
если int то  (int) smile
и беру $var как ссылку что бы в неё вернуть.
Но остановлюсь на варианте с четырмя аргументами, потому что т.к работаю с ЧПУ, а там переменные p1, p2, p3 то что бы у них были нормальные имена) Сразу двух зайцев)

Автор: skyboy 13.11.2008, 16:24
Цитата(Валерия @  13.11.2008,  14:44 Найти цитируемый пост)
Пишу функцию которая будет вытягывать с $_POST или $_GETзначение и фильтровать его

такое уже есть: http://php.net/filter_input_array и http://php.net/filter_var

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)