【发布时间】:2013-07-14 07:15:09
【问题描述】:
也许我只是累了或只是感到困惑,但我在处理一些require_once() 电话和ob_start() 时遇到了一个奇怪的问题。
基本结构:
Main.php 顶部:
require_once 'config.php'; // includes variable $A = "bar", and Function "foo"
function getPage(){
ob_start();
include 'some_file.php';
$html = ob_get_clean();
echo $html;
die();
}
getPage();
some_file.php
require_once 'config.php'; // includes same config file
var_dump($A); // NULL
foo(); // runs, returns correct value
Config.php
$A = 'bar';
function foo(){
return "FOO";
}
那么,这里有什么问题?我在缓冲输出时包含一个文件。所需的文件config.php 包含一个变量和函数。在缓冲区中包含some_file.php 时,变量$A 显然是不可设置/不可访问的。函数foo可以执行。
【问题讨论】:
-
是否有您没有向我们展示的函数(在 main.php 或 some_file.php 中)?
-
您在哪里使用显然未设置的
$A?请向我们展示更完整的SSCCE。 -
无论何时包含/要求,类和函数都在全局范围内声明;被包含的文件中的变量仅在包含语句之后才可用。