3

var_dump()在脚本中多次使用函数来检查变量的实际值和类型。长期以来,足以使功能vardump()女巫定义如下:

function vardump($_var){
    echo '<pre>';
    var_dump($_var);
    echo '</pre>';
}

但是今天我已经使用它很多次和很多地方了,以至于我对我真正检查的那个变量感到困惑。所以问题是如何确定我当前正在检查的值的名称?

4

5 回答 5

3

经过一上午的搜索,我找到了这个解决方案:

/**
 * Functions that will display name of the variable, and it's value, and type
 * 
 * @param type $_var - variable to check
 * @param type $aDefinedVars - Always define it this way: get_defined_vars()
 * @return type
 */
function vardump(&$_var, &$aDefinedVars = null){
    if($aDefinedVars){
         foreach ($aDefinedVars as $k=>$v)
            $aDefinedVars_0[$k] = $v; 
        $iVarSave = $_var; // now I copy the $_var value to ano
        $_var     = md5(time());

        $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));
        $_var      = $iVarSave;
        $name      = $aDiffKeys[0];
    }else{
        $name = 'variable';
    }

    echo '<pre>';
    echo $name . ': ';
    var_dump($_var);
    echo '</pre>';
}

要获取变量名称,您必须确保使用vardump()如下:

vardump($variable_name, get_defined_vars());

get_defined_vars() 此函数返回一个多维数组,其中包含所有已定义变量的列表,无论是环境变量、服务器变量还是用户定义变量,都在调用 get_defined_vars() 的范围内。

我将对代码进行更多解释,其中使用了一些奇特的函数。

/**
 * Functions that will display name of the variable, and it's value, and type
 * 
 * @param type $_var - variable to check
 * @param type $aDefinedVars - Always define it this way: get_defined_vars()
 * @return type
 */
function vardump(&$_var, &$aDefinedVars = null){
    // $aDefinedVars - is array of all defined variables - thanks to get_defined_vars() function
    if($aDefinedVars){
        // loop below is used to make a copy of the table of all defined variables
        foreach ($aDefinedVars as $k=>$v)
            $aDefinedVars_0[$k] = $v; // this is done like that to remove all references to the variables
        $iVarSave = $_var; // now I copy the $_var value to another variable to prevent loosing it
        $_var     = md5(time()); // completly random value
        // and the most tricky line
        $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));

因为我已经更改了$_var值数组$aDefinedVars_0并且$aDefinedVars除了$_var值之外是相同的(注意$aDefinedVars_0不要使用对变量的引用,所以$_var我没有影响chengin $aDefinedVars_0)。

现在该array_diff_assoc函数将$aDefinedVars_0(原始值)与$aDefinedVars(更改$_var值)进行比较,并返回与关联数组(仅包含一个位置$_var名称和$_var值的数组)的差异。

array_keys函数从输入数组返回键、数字和字符串(输入数组只包含我要查找的一个位置)。

        $_var      = $iVarSave; // now I can restore old $_var value
        $name      = $aDiffKeys[0]; // name of the $_var is on the first (and the only position) in the $aDiffKeys array
    }else{ // is someone won't use get_defined_vars()
        $name = 'variable';
    }

    echo '<pre>';
    echo $name . ': ';
    var_dump($_var); // it can be changed by print_r($_var);
    echo '</pre>';
}

PS。对不起我的英语。

于 2013-01-22T09:00:26.230 回答
2

我在互联网上看到许多奇怪的脚本来解决您的问题或类似的问题......

我认为,通常,最好的方法是将变量的名称(如果需要可以缩短)作为字符串参数传递:

function vardump($_var, $var_name){
echo '<pre> Variable <b>$var_name</b>: ';
var_dump($_var);
echo '</pre>';
}

它不是那么快,但它是一个很好的解决方案。

于 2013-01-22T09:16:54.087 回答
1

好吧,我想推荐一个名为 dump_r 的 php 类。该类以不同的颜色显示信息,它是 var_vump 和 print_r 的组合。您可以在 phpclasses.org 上找到它

链接在这里

于 2013-01-22T09:09:18.557 回答
1

由于 to 的参数vardump可能是表达式而不是变量,因此这是您可以获得的最接近的值:

function vardump($_var, $_label){
    echo '<pre>';
    if(!empty($_label)){
      echo $_label . ': ';
    }
    var_dump($_var);
    echo '</pre>';
}
于 2013-01-22T09:00:58.957 回答
0

您不能将变量名称作为字符串获取。您可以使用如何在 PHP 中将变量名作为字符串获取?但如前所述,它并不完美。

我认为您最好的选择是自己添加或使用全局变量并将 var 名称作为字符串传递

function vardump($_var){
    echo '<pre>';
    var_dump($GLOBALS[$_var]);
    echo '</pre>';
}

vardump("foo");
于 2013-01-22T09:00:57.987 回答