Возможные дубликаты:
PHP: получить имя переменной, переданное как аргумент
Как получить имя переменной как строку в PHP?
Если бы у меня был
$abc = '123'; function write($var){ }
Как бы я внутри write
узнал, что переменная, представленная теперь $var
называется $abc
?
Это невозможно. Даже передача по ссылке вам не поможет. Вам нужно будет передать имя в качестве второго аргумента.
Но то, что вы попросили, безусловно, не является хорошим решением вашей проблемы.
Вы не можете получить имя переменной, но если вы хотите его для отладки, вы можете использовать встроенный debug_backtrace()
PHP, и я также рекомендую взглянуть на Xdebug .
С помощью этой функции вы можете получить некоторые данные о вызывающем, включая номер файла и строки, чтобы вы могли найти эту строку вручную после запуска скрипта:
function debug_caller_data() { $backtrace = debug_backtrace(); if (count($backtrace) > 2) return $backtrace[count($backtrace)-2]; elseif (count($backtrace) > 1) return $backtrace[count($backtrace)-1]; else return false; }
Полный пример:
<?php function debug_caller_data() { $backtrace = debug_backtrace(); if (count($backtrace) > 2) return $backtrace[count($backtrace)-2]; elseif (count($backtrace) > 1) return $backtrace[count($backtrace)-1]; else return false; } function write($var) { var_dump(debug_caller_data()); } function caller_function() { $abc = '123'; write($abc); } $abc = '123'; write($abc); caller_function();
Разумеется, это невозможно без создания для него расширения PHP.
Вы, конечно, не хотите полагаться на это, особенно в функции. Функция не должна работать вне своей области (за исключением глобальных, но я их ненавижу).
Этот ответ дает некоторые предположения:
Обратите внимание, что функция использует проход по ссылке. Я предполагаю, что это будет необходимо для точного сравнения объектов.
function write(&$var) { $varname = null; foreach ($GLOBALS as $name => $val) { if ($val === $var) { $varname = $name; break; } } }
Есть ли конкретная причина, по которой вам нужно имя var? Возможно, лучшее решение.
† Добавлен акцент на предположение № 3