PHP在主页面中设置的变量在包含的页面中不可访问

时间:2014-04-25 06:09:31

标签: php

我在包含文件中获取变量值时遇到问题。请看下面的代码片段

我在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

的价值

由于

4 个答案:

答案 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;
?>

工作正常