我无法访问包含文件中的函数中的全局变量

时间:2011-10-05 13:37:14

标签: php

我无法访问包含文件中的全局变量

示例文件:dl.dropbox.com/u/9486036/similasyon.zip

模拟

的index.php:

<?

function init(){
    include "init.php";
}

init();

?>

的init.php:

<?

$data = "data_string";

echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n"; 

include "php/funcs.php";

?>

funcs.php:

<? 

echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n";

function func_load()
{
    global $data;
    echo "Data-test in ".__FILE__." in function func_load(): <b>".$data."</b><br />\r\n";

    include dirname(__FILE__)."/funcs/sub_func.php";
}

func_load();

?>

sub_func.php:

<? 
    echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n";
?>

屏幕输出:

Data-test in \similasyon\init.php                             : data_string 
Data-test in \similasyon\php\funcs.php                        : data_string 
Data-test in \similasyon\php\funcs.php in function func_load():  
Data-test in \similasyon\php\funcs\sub_func.php               :

4 个答案:

答案 0 :(得分:2)

那是因为初始include也包含在一个函数中,并且在你的index.php中需要global $data这样的内容。

 function init(){
      global $data;
      include "init.php";
 }
 init();

答案 1 :(得分:2)

考虑一下你在做什么。完成所有包含后,您最终会得到类似的结果:

<?php

function init(){
    $data = "data_string";

    echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n"; 
    echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n";

    function func_load()
    {
        global $data;
        echo "Data-test in ".__FILE__." in function func_load(): <b>".$data."</b><br />\r\n";
        echo "Data-test in ".__FILE__.": <b>".$data."</b><br />\r\n";
    }

    func_load();
}

init();

?>

基本上,$data不在全球范围内。您必须将init()更改为:

function init(){
    global $data;
    include "init.php";
}

虽然你应该认真考虑重组代码,因为这看起来并不好看。

特别是包括内部包括什么时候它们都属于同一个功能体。

答案 2 :(得分:1)

您可以通过$data关键字

global真正全球化,随处可见
function init(){
    global $data;
    include "init.php";
}

init();

答案 3 :(得分:1)

如果你改变:

<?

function init(){
    include "init.php";
}

init();

?>

<?

function init(){
    global $data;
    include "init.php";
}

init();

?>

然后它应该工作。