我不能访问全局变量在函数中包含的文件


I can not access the global variable in function in included file

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

示例文件: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               :

这是因为最初的include也被包装在一个函数中,并且在index.php

中需要一个global $data
 function init(){
      global $data;
      include "init.php";
 }
 init();

想想你在做什么。在完成所有包含之后,您将得到如下内容:

<?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";
}

尽管您应该认真考虑重构代码,因为这看起来不太好。

特别是在包含中包含所有属于同一函数体的内容

您可以使$data真正全局使用它与global关键字:

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

如果您更改:

<?
function init(){
    include "init.php";
}
init();
?>

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