0

我希望一个变量是超全局的,但是由于我使用的是程序风格,我认为我不能自己制作一个,所以基本上问题是使用查询从安全表中检索我的网站的所有安全控制,我检查维护模式是否打开/关闭,如果打开,则将其重定向到维护页面下的网站,因此在每个页面上我需要检查变量的状态,$maintenance_status为此,我需要在每个页面上调用该查询,否则我收到一个未定义变量的错误,此外,如果我正在创建一个函数并将该函数文件包含在其他页面中,它向我显示$db_connect(这是我的数据库连接变量)未定义,我将我的页面包含在这个序列中

include_once('connection.php');
include_once('functions.php');
 /*other scripts goes here*/

知道如何在每个页面上提取此状态吗?我想为常见查询创建一个新文件,但它是一个干净的解决方案吗?此外,我想我不理解包含,如果我connection.php之前包含而functions.php不是为什么我functions.php显示未定义的变量$db_connect

4

2 回答 2

1

您可以通过使用 define() 来使用常量。每次脚本执行可以设置一次定义,并且在一次脚本执行期间不能更改。它们是超全局的 - 也跨被包含的文件。

请参阅http://php.net/define或只是

define('MY_CONSTANT', 'whatever');
define('MY_OTHER_CONSTANT', false);

function foo() {
    if (MY_OTHER_CONSTANT !== true) {
        echo MY_CONSTANT;
    }
}

foo();
于 2012-09-06T16:00:26.470 回答
0

如果没有更多关于文件中哪里出现错误的代码上下文,将很难提供任何建议。例如,您对 $db_connect 的引用是从函数内部完成的吗?如果是这样,除非您global $db_connect在该函数中有声明(在全局范围内使用 $db_connect 而不是在函数范围内使用未定义的 $db_connect),否则它将不起作用。

虽然出于多种原因我不喜欢global在函数中使用这样的声明(我宁愿使用依赖注入,或者通过静态单例函数调用获取数据库连接),但这可能是另一个教训。

无论如何,您可能最好在某种初始化脚本中进行查询(例如在您的 connection.php inlcude 之后)并定义一个关于维护模式是打开还是关闭的常量。像这样的东西

// assuming you have already made DB query and have a value of true/false on a variable called $is_maint_mode
define('MAINT_MODE', $is_maint_mode);

这将为您提供一个MAINT_MODE对您的代码全局可用的常量。

于 2012-09-06T15:59:29.047 回答