我var_dump()
在脚本中多次使用函数来检查变量的实际值和类型。长期以来,足以使功能vardump()
女巫定义如下:
function vardump($_var){
echo '<pre>';
var_dump($_var);
echo '</pre>';
}
但是今天我已经使用它很多次和很多地方了,以至于我对我真正检查的那个变量感到困惑。所以问题是如何确定我当前正在检查的值的名称?
我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));
因为我已经更改了$_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。对不起我的英语。
我在互联网上看到许多奇怪的脚本来解决您的问题或类似的问题......
我认为,通常,最好的方法是将变量的名称(如果需要可以缩短)作为字符串参数传递:
function vardump($_var, $var_name){
echo '<pre> Variable <b>$var_name</b>: ';
var_dump($_var);
echo '</pre>';
}
它不是那么快,但它是一个很好的解决方案。
好吧,我想推荐一个名为 dump_r 的 php 类。该类以不同的颜色显示信息,它是 var_vump 和 print_r 的组合。您可以在 phpclasses.org 上找到它
由于 to 的参数vardump
可能是表达式而不是变量,因此这是您可以获得的最接近的值:
function vardump($_var, $_label){
echo '<pre>';
if(!empty($_label)){
echo $_label . ': ';
}
var_dump($_var);
echo '</pre>';
}
您不能将变量名称作为字符串获取。您可以使用如何在 PHP 中将变量名作为字符串获取?但如前所述,它并不完美。
我认为您最好的选择是自己添加或使用全局变量并将 var 名称作为字符串传递
function vardump($_var){
echo '<pre>';
var_dump($GLOBALS[$_var]);
echo '</pre>';
}
vardump("foo");