我的大多数功能都取决于设置。
截至目前,我将设置值存储在数据库中。
例如,在页面中显示广告我正在检查我的数据库是否要显示广告
我的意思是这样的
$display_ad = 'get value from database';
if ($display_ad) {
echo 'Ad code goes here';
}
这很好。但事实是我有超过100个设置。因此,如果我在settings.php文件中定义值,我认为我的数据库负载会减少,如
define('DISPLAY_AD', true);
if (DISPLAY_AD) {
echo 'Ad code goes here';
}
但我不确定这是正确的方法。 define()
是否是正确的解决方案。或者有更好更快的解决方案吗?
答案 0 :(得分:1)
如上所述,有几个选项包括.ini
个文件(使用parse_ini_file()
等等。),XML(某些与SimpleXML的混合)但我更喜欢在本机PHP中保留配置。
include()
构造允许从包含的文件中获取return
。这允许您:
<强>的config.php 强>
return [
'foo' => [
'bar' => [
'qux' => true,
],
'zip' => false,
],
];
<强> elsewhere.php 强>
function loadConfig($file) {
if (!is_file($file)) {
return false;
}
return (array) call_user_func(function() use($file) {
// I always re-scope for such inclusions, however PHP 5.4 introduced
// $this rebinding on closures so it's up to you
return include($file);
});
}
$config = loadConfig('config.php');
if ($config['foo']['bar']['qux']) {
// yeop
}
if ($config['foo']['zip']) {
// nope
}
需要特别小心,因为当你试图取消引用一个不存在的维度时,PHP会大肆宣传你:
if ($config['i']['am']['not']['here']) { // poop
}
创建一个包装类/函数来管理配置以满足您的需求是相当微不足道的。您可以添加对级联配置的支持(在ASP世界中 la web.config
),缓存等。
答案 1 :(得分:0)
define()
是一种很好的做事方式。另一种方法是定义全局数组。比如
$config['display_ad']=true;
$config['something_else']='a value';
//...
function doSomething() {
global $config;
if ($config['display_ad']) echo 'Ad code goes here';
}
后一种方式是许多项目使用的,例如phpmyadmin,原因可能是,你不能define()
非标量值,例如define('SOME_ARRAY',array('a','b'))
无效。
答案 2 :(得分:0)
执行最简单的事情是ini文件。您创建一个如下所示的文件:
value1 = foo
value2 = bar
value3 = baz
然后,从PHP中,您可以执行此操作:
$iniList = get_ini_file("/path/to/ini/file/you/just/made");
if ($iniList['value1'] == 'foo') {
print "This will print because the value was set from get_ini_file."
}
如果你有很多类似的常量,那比几十种定义方法更好,比数据库提取更快。
答案 3 :(得分:0)
你也可以在这里上课: php.net