2016-03-24 54 views
0

所以基本上我无法通过的是回显一个变量,它包含来自包含文件的变量。回声变量与包含文件中的变量

说明:

我有3个文件:

index.php 
system/functions.php 
system/config.php 

每个文件包括其他的文件,这样他们工作像一个(除了指数)

系统/ functions.php的包含:

include_once $_SERVER['DOCUMENT_ROOT'].'/system/config.php'; 
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php'; 

系统/ config.php文件包含:

include_once $_SERVER['DOCUMENT_ROOT'].'/system/functions.php'; 
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php'; 

没有什么不妥之处,他们没有问题一起工作,他们可以自己之间successfuly传递变量。

当我想:

echo $message; 

的index.php,产量仅是从变量的字符串,跳过其他变量从包含的文件...

在这种情况下,的functions.php文件包含

$message = $varfromconfig."Some String"; 

其中的config.php包含

$varfromconfig = "someword "; 

,当我呼应$message指数页面,只有Some String返回,没有配置变量...为什么? (应该返回someword Some String

谢谢。

当然,在index.php同时包含了配置和功能...

include_once 'system/config.php'; 
include_once 'system/connection.php'; 
include_once 'system/functions.php'; 
+0

你没有得到任何错误?错误报告是? – Jeff

+0

激活错误报告('error_reporting(E_ALL); ini_set('display_errors',1);'在脚本的顶部)查看'$ varfromconfig'是否为空或未设置。 – fusion3k

+0

你可以在设置$ message并在这里发布后,在$ varfromconfig上执行var_dump()? – rvbarreto

回答

0

在index.php文件执行此操作:

//include_once 'system/config.php'; remove this include from index.php 
include_once 'system/connection.php'; 
include_once 'system/functions.php'; 

OR,这样做:

include_once 'system/config.php'; remove this include from index.php 
include_once 'system/connection.php'; 
include 'system/functions.php'; //not include_once 

当插入两者时,您会有一个循环。我想你的关系config.phpfunctions.php可能会更复杂,然后你写在这里,所以我会试着详细说明发生了什么,所以你可以找到另一个解决方案,如果需要的话。

运行后立即index.php,它要求config.php。然后,里面config.php文件,出现这种情况:

的config.php插入的functions.php,但随后的functions.php插入的config.php,并config.php文件插入funtions.php再次,这将永远保持。所以PHP解释器只是打破循环从里面config.php文件发生,仅导入的functions.php前,但不会从里面的functions.php从内的config.php导入的config.php 。 (该死以来)

所以现在我们刚刚通过1号线的的index.php,并已引进第一的config.php的index.php然后的functions.phpconfig.php文件 。解释器首先加载了它的变量,然后去config.php函数加载它的变量。

因此,首先从functions.php,它运行$message = $varfromconfig."Some String";。一旦config.php尚未解释,$ varfromconfig仍为空,它将“Some String”设置为$message。然后它运行$varfromconfig = "someword ";,但没有将它分配到$message,因为$消息分配已完成。

在seccond线,connections.php是进口的,然后在第三行就尝试导入的functions.php,但的functions.php已经插入。所以include_once不要让它被导入。

为了解决这个问题,曾经在的functions.php变量需要的config.php先运行,你只需要调用在的index.php的functions.php,让的functions.php通话config.php本身。另一种解决方案是使用include而不是include_once插入functions.php并让它被解释两次。

+0

我现在明白了,但如果两个文件都需要对方呢?函数包括配置但配置包括函数,是不是在一个循环呢?... –

+0

@StevenDropper这就是所谓的*循环依赖*,并且是疯狂的。有一件事不能依靠另一件,而另一件事也取决于它。你必须在那里做一些重构。 – deceze