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


Why compact() is returning an empty array inside a function?

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

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) );
}

试试这个:

//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;
}

编辑:我不建议这样做,但这确实解决了您的问题。