Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php echo变量与包含文件中的变量_Php_Include - Fatal编程技术网

Php echo变量与包含文件中的变量

Php echo变量与包含文件中的变量,php,include,Php,Include,所以,基本上我不能通过的是回显一个变量,它包含来自包含文件的变量 说明: 我有3个文件: index.php system/functions.php system/config.php 每个文件都包含另一个文件,因此它们的工作方式类似于一个文件(索引除外) system/functions.php包含: include_once $_SERVER['DOCUMENT_ROOT'].'/system/config.php'; include_once $_SERVER['DOCUMENT_RO

所以,基本上我不能通过的是回显一个变量,它包含来自包含文件的变量

说明:

我有3个文件:

index.php
system/functions.php
system/config.php
每个文件都包含另一个文件,因此它们的工作方式类似于一个文件(索引除外)

system/functions.php包含:

include_once $_SERVER['DOCUMENT_ROOT'].'/system/config.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/functions.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php';
system/config.php包含:

include_once $_SERVER['DOCUMENT_ROOT'].'/system/config.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/functions.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/system/connection.php';
这没什么问题,他们一起工作没有问题,他们可以成功地在他们之间传递变量但是

当我想:

echo $message;
index.php上,输出只是变量中的字符串,并从包含的文件中跳过其他变量

在本例中,functions.php文件包含

$message = $varfromconfig."Some String";
其中config.php包含

$varfromconfig = "someword ";
当我将
$message
回显到index页面时,只返回字符串
Some string
,而不返回配置变量。。。为什么?(应返回
someword-somestring

多谢各位

当然,index.php包含配置和函数

include_once 'system/config.php';
include_once 'system/connection.php';
include_once 'system/functions.php';
在index.php中执行此操作:

//include_once 'system/config.php'; remove this include from index.php
include_once 'system/connection.php';
include_once 'system/functions.php';
,执行以下操作:

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.phpinsertfunctions.php,然后再插入functions.phpinsertconfig.php,再插入config.phpinsertfuntions.php,这将永远保持下去。所以php解释器只是在它发生之前打破循环,只从config.php内部导入functions.php,而不从functions.php内部导入config.php。(该死的《盗梦空间》)

现在我们刚刚通过了index.php的第1行,首先从index.php导入config.php,然后从config.php导入functions.php。解释器首先使用红色functions.php,加载变量,然后转到config.php加载变量

因此,首先从functions.php运行
$message=$varfromconfig.“Some String”。一旦config.php尚未被解释,并且$varfromconfig仍然为空,它就会将“一些字符串”分配给
$message
。然后运行
$varfromconfig=“someword”,但未将其分配给
$message
,因为已完成$message分配

在第二行,connections.php被导入,然后在第三行,它尝试导入functions.php,但是functions.php已经被插入。所以不要让它被导入


为了解决这个问题,一旦functions.php中的变量要求config.php首先运行,您只需在index.php处调用functions.php并让functions.php自己调用config.php。另一种解决方案是使用
include
和not
include\u once
插入函数。php并让它被解释两次。

您没有得到任何错误吗?错误报告处于启用状态?激活错误报告(
error\u reporting(E\u ALL);ini\u set('display\u errors',1);
在脚本顶部)以查看
$varfromconfig
是否为空或未设置。在设置$message并在此处发布后,能否在$varfromconfig处执行var\u dump()。@Jeff,错误报告从我的编程生涯开始就处于启用状态。所以没有,没有错误。@rvbarreto
var\u dump($varfromconfig)
reuturns
NULL
。。仅在功能页。。。?可能是bug吗?我现在明白了,但是如果两个文件都需要对方呢?函数包含config,但config包含函数,它不是又在循环中吗?..@StevenDropper,这被称为循环依赖,是疯狂的。一件事不能依赖另一件事,而另一件事也依赖它。您必须在那里进行一些重构。