我无法访问包含文件中的全局变量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();
?>