我在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
,并且$baseurl
在settings.php
中被定义为全局变量,那么它将在随后包含的所有文件中可用。如果变量是在settings.php
中的函数中定义的,则需要在这里将其定义为全局变量:
$GLOBALS['baseurl'] = 'theurl';
如果在任何随后包含的文件中的函数中访问它,它也需要通过$GLOBALS[]
访问:
echo $GLOBALS['baseurl'];
如果您希望从多个文件访问全局变量,强烈建议始终使用$GLOBALS[]
数组,因为在任何范围内都可以清楚地看到该变量是全局设置和访问的。
如果在函数中require()文件,则变量在函数的作用域中定义:它们不是全局的。
在settings.php中使用$GLOBALS['baseurl'] = '...';