微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何改进var_dump以显示变量名称并将变量值放入?

我在我的脚本中多次使用var_dump()函数来检查变量的实际值和类型.很长一段时间,它应该使函数vardump()女巫定义如下:

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

但今天我一直在使用它这么多次和地方,我很困惑,我正在检查的变量.
那么问题是如何确定我正在检查的值的名称

解决方法:

在所有早上搜索之后我找到了这个解决方案:

/**
 * 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));

Becouse我更改了$_var值数组$aDefinedVars_0和$aDefinedVars是相同的,只有$_var值(注意$aDefinedVars_0不使用对变量的引用所以chengin $_var我没有影响$aDefinedVars_0).

现在,array_diff_assoc函数将$aDefinedVars_0(带有原始值)与$aDefinedVars(带有更改的$_var值)进行比较,并返回与关联数组(仅包含一个位置$_var name和$_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.对不起我的英语.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐