问题的解释
PHP 函数通常以下列方式调用:
myFunction($parameter);
如果 $parameter 没有设置,PHP 会抛出一个错误。解决方案如下:
if (isset ($parameter))
{
myFunction($parameter);
}
但是,每次您想调用该函数并且不确定它是否已设置时,都必须使用 if() 检查,这真的很烦人。我想到的第一件事就是像这样声明函数:
function myFunction($local)
{
if(isset($local))
{
//Code goes here.
}
}
但是调用该函数不起作用,因为 PHP 似乎不支持将未设置的变量作为参数提供给函数。为了解决这个问题,我使用了变量:
function myFunction($local)
{
if(isset(${$local})
{
//Code goes here.
}
}
myFunction('parameter');
要了解变量变量的工作原理,请参阅PHP 手册。
这工作正常,直到我需要检查数组索引。为了解决这个问题,我创建了一个不同的函数来处理肯定要设置的数组:
myFunctionArray($array,$key)
{
if(isset($array[$key]))
{
//Code goes here.
}
}
$variable = array();
myFunctionArray($parameter,'key');
在这种情况下,由于设置了 $variable,并且 'key' 是一个无害的字符串,即使没有设置 $variable[$key] 也不会出错,并且您可以成功地在函数内部进行 isset 检查。但是,这显然不支持多维数组。为了支持多维数组,必须在函数中添加更多参数,以预期数组预期具有的维数。这两个功能中的任何一个都可以工作:
myFunctionMultiArray($array,$key1,$key2,$key3)
{
if(isset($array[$key1][$key2][$key3]))
{
//Code goes here.
}
}
myFunctionMultiArray2($array,$keys)
{
if(isset($array[$keys[0]][$keys[1]][$keys[2]]))
{
//Code goes here.
}
}
$variable = array();
myFunctionMultiArray($parameter,'key1','key2','key3');
myFunctionMultiArray2($parameter,array('key1','key2','key3');
另一个问题,现在我们手头有很多函数,每个数组深度都有一个。我们如何做到这一点,以便可以为函数提供任何深度的数组?