0

我正在编写一种方法来生成用于在调试模式下记录函数和参数的详细数据。我之前在多个地方复制了相同的代码(不好),但它工作得很好(好):

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.';
    }

可以这样使用

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 警告变量变量不能与 superglobals 一起使用,但是不清楚从 get_func_argNames 返回的数据是否被认为是“超全局”。

有没有人看到任何其他可能导致变量变量在这个函数中不起作用的东西?

4

2 回答 2

1

您不能从另一个函数访问一个函数中的局部变量。变量变量仅在本地范围内运行。因此,您需要将参数作为数组传递给调试函数。

function return_debug_header($php_function, $args)
{

    // returns debug string to debug handler
    $arr_args = get_func_argNames($php_function);
    if (is_array($arr_args)) {
        foreach ($arr_args as $i => $arg)
        {
            $txt.= "$arg: {$args[$i]}<br>";
        }
    } else {
        $txt = 'No arguments passed.';
    }
}

将此用作:

$_debug_text = return_debug_header(__FUNCTION__, func_get_args());
于 2013-05-20T21:55:21.210 回答
0

为了进一步了解您可以从中获得什么,请研究编程中的“范围”。一般来说,理解变量访问和编程的工作原理是必不可少的。 http://en.wikipedia.org/wiki/Scope_(computer_science)

于 2013-05-20T22:23:47.400 回答