Я пишу метод для генерации подробных данных для ведения журналов функций и аргументов в режиме отладки. Я ранее воспроизведен тот же код в нескольких местах (плохо), но она работает просто отлично (хорошо):get_func_argNames и переменные переменные
function validate_date($date)
{
if ($condition)
{
$php_function = __FUNCTION__;
$php_function_args = implode(', ',get_func_argNames($php_function));
foreach (get_func_argNames($php_function) as $arg)
{
$txt.= "$arg: ${$arg}<br>";
}
}
}
Так что я написал новый метод, чтобы сделать это легче поддерживать:
$_debug_txt = return_debug_header(__FUNCTION__);
function return_debug_header($php_function)
{
// returns debug string to debug handler
$arr_args = get_func_argNames($php_function);
$php_function_args = implode(', ',$arr_args);
if (is_array($arr_args)) {
foreach ($arr_args as $arg)
{
// $arg shows the right variable NAME, but ${$arg} is null.
$txt.= "$arg: ${$arg}<br>";
}
} else {
$txt = 'No arguments passed.';
}
It может быть использован как этот
function validate_date($date)
{
if ($condition)
{
// generate debug header only if debug is true.
$_debug_txt = return_debug_header(__FUNCTION__);
// do something with txt...
}
}
проблема в том, что переменные переменные не отображается для работы с данными, полученными из get_func_argNames
. Имеются имена переменных (я могу напечатать их на экране), но соответствующее значение будет пустым.
PHP предупреждает, что variable variables do not work with superglobals, однако неясно, считаются ли данные, возвращенные из get_func_argNames, «суперглобальными».
Кто-нибудь видит что-нибудь еще, что может привести к тому, что переменные переменные не будут работать внутри этой функции?
Это не будет работать из-за переменных областей. Переменная '$ date' существует только в функции' validate_date() ', а не в' return_debug_header() '. – Barmar
$ date получается из массива 'get_func_argNames (__ FUNCTION __)'. Я не уверен, что буду следовать. –
Переменная переменная оценивается внутри 'return_debug_header()', поэтому ее можно использовать только для доступа к переменным в ее области действия, а не в области других функций. – Barmar