我在我的脚本中多次使用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($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 举报,一经查实,本站将立刻删除。