我无法访问包含文件中的全局变量
示例文件: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 :
答案 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();
?>
然后它应该工作。