自定义变量,可以像超级全局变量一样在每个页面上使用


Custom variable which can be used on each page like super globals?

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

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

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

您可以通过使用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();

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

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

无论如何,最好用某种init脚本(比如在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