'extract'后看不到全局变量

时间:2015-01-23 20:30:57

标签: php

在我的 main.php 文件中,我准备了一组值。 我提取'那个数组,之前包括'另一个文件( template.php )。 数组的所有键都可以在template.php中作为变量(thx to' extract' function), 但是,当在 template.php 中定义的函数中使用它们时,变量对于范围是不可见的,而是我得到了“未初始化的值”'错误。

我认为这是因为范围可变,但是全球性的'关键字没有解决问题。

这是代码的简短版本。

// main.php

$array = ["page" => "my current page"];

extract($array);
include('template.php');

// template.php
<?php

    function foo(){
        // global $page; // putting 'global' didn't make it work
        print $page;    // uninitialized variable; 

    }

    print $page;        // work OK - print $page value
    foo();

?>

THX

2 个答案:

答案 0 :(得分:1)

您可以简单地修改foo()方法来接受变量,而不是尝试使用全局变量(这不是一个好主意)。

<强> Main.php

<?php

$array = array("page" => "my current page");

extract($array);
include('template.php');
?>

Template.php

<?php

    function foo($page)
    {
        print 'The page is: ' . $page;
    }

    foo($page);

?>

您的函数无法访问提取的变量,但可以将它们作为常规参数发送。 (如果您在适当的范围内使用它们,请提供。)

See it in action

答案 1 :(得分:0)

// main.php
$array = ["page" => "my current page"];

createVars($array);

function createVars($data) {
    foreach($data as $key => $val) {
        global ${$key};
        ${$key} = $val;
    }
}

include ('template.php');


// template.php
function foo(){
    global $page;
    print $page;
}
foo();
// you should now be able to access $page inside of foo();