PHP $var在使用多个require()时未定义


PHP $var undefined when using multiple require()

我在settings.php文件中设置了一个$baseurl。

在我的index.php中,我有3个require()在一行中设置。php/header.php/mashead .php.

当我回显$baseurl时,它是未定义的。如果我在header.php中定义了$baseurl,那么它就会在header.php文件中工作。

如何在settings.php文件中定义$baseurl并在每个require()中可用?

包含顺序

设置$baseurl的文件必须先设置为require_once(),之后的文件才能访问该变量

函数范围

如果您在函数中定义$baseurl或从函数中定义的文件是require_once(),则$baseurl将被困在该函数作用域中。如果settings.php看起来像这样:

<?php
function setup_config() {
    $baseurl = 'http://www.example.org';
}

或在函数内要求

<?php
function include_a_file($file) {
    require_once 'my/base/path/' . $file;
}

这在PHP手册的可变作用域部分中有记录。

解决这个问题的一种方法是将$baseurl添加为$GLOBALS数组中的元素,而不是作为独立变量:
$GLOBALS['config']['baseurl'] = 'my/base/url/';

注意我已经添加了['config']元素来命名你的配置,远离任何你可能想要放在$GLOBALS中的东西。

变量unset()

另一种可能是您可能在代码的其他地方调用unset($baseurl),这将标记变量为未定义。

如果您在settings.php中定义了它,它应该在所有包含的脚本的全局作用域中可用。当你输入一个函数时,作用域会改变,所以变量将不可用,除非你在函数开始时通过声明global $baseurl;来"导入"它(尽管不建议)。

如果首先包含settings.php,并且$baseurlsettings.php中被定义为全局变量,那么它将在随后包含的所有文件中可用。如果变量是在settings.php中的函数中定义的,则需要在这里将其定义为全局变量:

$GLOBALS['baseurl'] = 'theurl';

如果在任何随后包含的文件中的函数中访问它,它也需要通过$GLOBALS[]访问:

echo $GLOBALS['baseurl'];

如果您希望从多个文件访问全局变量,强烈建议始终使用$GLOBALS[]数组,因为在任何范围内都可以清楚地看到该变量是全局设置和访问的。

如果在函数中require()文件,则变量在函数的作用域中定义:它们不是全局的。

在settings.php中使用$GLOBALS['baseurl'] = '...';