为什么compact()在函数内返回一个空数组?

时间:2015-01-12 17:29:30

标签: php arrays

我正在尝试创建一个函数,我可以将函数中定义的变量传递给另一个函数,这样我就可以提取变量并使用它们。让我首先展示我想要做的事情,这样更有意义。

function naija_render( $filePath, $defined_vars )
{
    $viewData = compact(array_keys( $defined_vars ));
    extract($viewData);

    ob_start();
    include ( $filePath . '.php' );
    $template = ob_get_contents();
    ob_end_clean();

    return $template;
}

现在让我简化并具体说明。

如果我打印这个

 print_r( compact(array_keys( get_defined_vars())) );

它打印紧凑数组但是当我尝试在函数中执行相同的操作时,我可以将get_defined_vars()作为$defined_vars传递,它会打印一个空数组。

function get_compact_defined_vars( $defined_vars ){
    //Returns blank array
    print_r( compact(array_keys($defined_vars) );
}

1 个答案:

答案 0 :(得分:0)

试试这个:

//something like that:
naija_render('viewfile', array('var1', 'varN'));


//rewrite your function like that:
function naija_render( $filePath, $defined_vars )
{
    $viewData = array();
    foreach ($defined_vars as $var) {
        $viewData[$var] = isset($GLOBALS[$var]) ? $GLOBALS[$var] : null;
    }
    extract($viewData);
    ob_start();
    include ( $filePath . '.php' );
    $template = ob_get_contents();
    ob_end_clean();

    return $template;
}

编辑:我不推荐这个,但这确实解决了你的问题。