我有一个文件 ,standalone.php
它打算作为自己的脚本运行,直接从浏览器中运行。它定义函数、类并包含其他文件。直接调用时效果很好。
它有这样的代码:
$DB = new Database(DB_DATABASE, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_SERVER, '', true);
function DB() { global $DB; return $DB; }
单独运行时,$DB 定义在全局名称空间中,返回对象的函数获取全局 $DB 对象。同样,这有效。
问题是,我有另一个文件,sometimesInvoker.php
它是从浏览器调用的,在某些情况下,需要包含standalone.php 并像standalone.php
直接调用一样输出到浏览器。它不能使用重定向,也standalone.php
不能通过 URL 包含。
中的代码sometimesInvoker.php
是:
LoadPage();
function LoadPage(){
include standalone.php;
}
所以层次结构看起来像:
Global name space / sometimesInvoker.php
LoadPage() function
standalone.php - thinks its global but it isn't
$DB - declared intending to be global but is actually a variable inside LoadPage() function?
function DB() - calls global DB and looks inside sometimesInvoker.php for a $DB var which isn't there, should be going up one level to LoadPage() function and grabbing that var.
所以我得到了问题,但是如何解决呢?我需要一种方法来让函数获取比它高一级的变量,而不管下一级是否是全局的。有任何想法吗?