我在包含文件中获取变量值时遇到问题。请看下面的代码片段
我在test.php中有以下代码
<?php
//this first block includes design.php and takes parameter from url string
ob_start();
require("includes/design.php");
$content = ob_get_contents();
ob_end_clean();
//this second block includes same file but different variable is passed
ob_start();
$itemtest = "This is test";
require("includes/design.php");
$contents_orderslip = ob_get_contents();
ob_end_clean();
?>
和design.php有以下代码
<?php
echo "ITEM TEST = ".$itemtest;
exit;
?>
当我执行test.php时,唯一要打印的是ITEM TEST =
。为什么我没有获得$itemtest
由于
答案 0 :(得分:5)
design.php
的输出保存到变量$contents_orderslip
。
您的代码没有回应,请将以下内容添加为最后一行:
echo $contents_orderslip;
<强>更新强>
由于您已编辑您的代码并将exit;
添加到design.php
,因此执行将在此处停止,但您仍应定义$itemtest
,因为它已在同样的全球范围。
<强> UPDATE2:强>
当您发布所有代码时,原因很明显。
如果exit;
中有design.php
,则代码执行将在exit;
之后立即停止,因此您的第二段代码甚至无法运行。
答案 1 :(得分:2)
因为您使用了ob_start();
- 它将暂停屏幕上显示的任何内容。
@xdazz是对的 - 你需要在ob_clean
:
echo $contents_orderslip;
您基本上已将所有输出存储到此变量中。
答案 2 :(得分:2)
在test.php
的第一个区块中,您尚未定义$itemtest
。因此,design.php
中的代码只会打印ITEM TEST =
,如果您启用了error_reporting(-1)
,则会看到有关未定义变量的通知。
第二个块根本不会运行,因为这里有一个exit;
语句:
echo "ITEM TEST = ".$itemtest;
exit;
这将刷新输出缓冲区并暂停整个程序。删除该语句将使$contents_orderslip
包含以下内容:
ITEM TEST = This is test
$content
将包含:
ITEM TEST =
答案 3 :(得分:-2)
test.php的
<?php
$users = "Hello World You Buddy";
require "defs.php";
?>
defs.php
<?php
echo $users;
?>
工作正常