такого примера будет достаточно? PHP: $name = 'value'; echo 'value: ' . $name; //Вывод значения. //А как вывести имя?
для этого пользуются ассоциативными массивами $array = array(); $array['name'] = 'Gromo'; foreach($array as $key=>$value){ echo "$key: $value"; }
yasaleen ИМХО, ты сам плохо представляешь себе что такое переменная - это просто ссылка на участок памяти с данными. на один и тот же участок памяти могут ссылаться две переменные с разными именами, и какое имя по твоему должна выводить функция?!
я тоже хотел бы иногда выводить имя переменной. Т.е. к переменной по имени обратиться можно. А узнать имя - низя. При чем пхп хранит именно имена переменных, для того, чтобы работали всякие фокусы...
Gromo Не, ты просто не представляешь, что такое дебажить var_dump'ом в файл. =)) Была у меня функция: PHP: <?php function logVar($name, $var, $return=false, $type='debug', $masPar=null){ ob_start(); var_dump($var); $msg=ob_get_clean(); if ($return) return $name." => ".$msg; else logMsg($name." => ".$msg, $type, 'var', $masPar); } и естественно я все время забывал дать имя переменной, и хорошо если это простой тип, а если массив?: Код (Text): logVar($maArray); и приходилось исправлять эту строку и снова дебажить. Мне это надоело и я поменял параметры местами: Код (Text): function logVar($var, $name='par', $return=false, $type='debug', $masPar=null){ но все равно хочется магии... кстати, то что "переменная - это просто ссылка на участок памяти с данными" я забыл после того как перестал работать с C. Т.е. я знаю., но в повседневной работе это как-то не особо нужно. Ну и, "какое имя должна выводить функция?" - вопрос вполне решаемый. Например, все в виде массива.
Опа... А ларчик то просто открывался.... Ща попробую... UPD: но как и следовало ожидать - не все так просто... PHP: <?php function varLog($var_vdp, $name=null, $return=false, $type='debug', $masPar=null){ ob_start(); var_dump($var_vdp); $msg=ob_get_clean(); if(!$name){ logVar(varDeepFind($var_vdp)); } if ($return) return $name." => ".$msg; else logMsg($name." => ".$msg, $type, 'var', $masPar); } function varDeepFind($var_vdp, $mas=null){ if(is_null($mas)) $mas=$GLOBALS; $rez=null; foreach($mas as $k=>$v_vdp){ if($k=='GLOBALS') continue; if ($v_vdp===$var_vdp){ $rez[]=$k; }elseif (is_array($v_vdp)){ if($find=varDeepFind($var_vdp, $v_vdp)){ $rez[$k]=$find; } } } return $rez; } Кое что конечно находит, но: 1)Если несколько переменных имеют одно и тоже значении (или являются ссылками), то найдет все. 2)Нужно еще обрабатывать массив с результатом. 3)Не работает с переменными функций. 4)Не учитываются объекты.
Если переменные рассматриваются как поля класса , то нет проблем с выводом их имен как на экран так и в логи. Код (Text): //создаем класс... class MyClass { public $UserName; public $UserLogin; //.....какой-то конструктор и прочие методы.... } $User = new myClass($Name,$Login); print('<pre>'); print_r(Get_Class_Vars($User)); на выходе получим ассоциативный массив как имя => значение. Этот метод очень удобен в том случае , если Вы применяете ООП подход к разработке ( процедурный подход остался далеко в прошлом ) .