我没有太多的PHP经验,我想知道如何在PHP中最好地创建递归函数。举个例子
$config = array(
"MYSQL" => array(
"SERVER" => "localhost",
"USERNAME" => "root",
"PASSWORD" => ""
),
"FOO" => "bar"
);
// Make the config global
config_parse(false, $config);
function config_parse($index, $value)
{
if(is_array($value))
{
foreach($value as $i => $e)
{
config_parse(($index ? $index . "_" : "") . $i, $e);
}
}
else
{
define($index, $value);
}
}
它做了我想要它做的事情,但是当我以这种方式初始化递归函数时,我觉得我“乱砍”/编写错误的代码(将false作为初始索引并在函数中检查它)
解决这个问题的方法可能是颠倒输入参数的顺序,这意味着当数组作为值传递时,不会访问索引值。
另一种方法是将递归函数拆分为启动函数和回调函数。
我想知道的是什么是“最佳实践”,最好是基于我的例子。
感谢您的回复
答案 0 :(得分:3)
对我而言,这取决于递归的复杂性。在具体示例中,您只需翻转参数并将第二个默认设置为null
(在这种情况下,我更喜欢null而不是false)。
function config_parse($value, $index = null)
{
// your logic - id detect null with if(null === $index)
}
答案 1 :(得分:0)
如果你有一个现有的系统,这可能是不可行的,但是我认为你可能确实想要一组加载的配置的通用前缀,这样不同的配置不会无意间互相破坏。这也使代码更简洁,更清晰:
function parseConfig($config,$index='CONFIG'){
if(is_array($config)){
foreach($config as $suffix => $subConfig){
parseConfig($index . '_' . $suffix, $subConfig)
}else{
define($index,$config)
}
}