嗯,这个问题没有简单的答案。正如@Redlab 所问,偏好是否经常变化?如果是这样,那么数据库似乎是“更好”的选择。但它的意义远不止于此……
这些偏好有很多吗?如果是这样,那么将其存储在文件系统中可能对命名空间文件和分层存储有意义。比如:
在site.php中
return array(
'title' => 'This is my page title',
'meta' => array(
'description' => 'My Meta Description',
'keywords' => 'key1, key2, key3',
),
);
基本上,为每个“命名空间”创建一个文件以将事物组合在一起。
这样做的好处是性能和可管理性。您可以根据需要在每个命名空间的基础上延迟加载配置。您可以通过添加一个名为命名空间的字段来模拟数据库中的效果,然后延迟加载这些字段,但由于每次访问都需要查询,因此速度会明显变慢。如果您有很多设置,那么在每个页面点击(甚至一次)时从数据库加载它也不会是最佳的......
我所做的是使用点符号。所以从上面的例子中,获取元关键字将是site.meta.keywords。这实际上很容易做到:
class Config {
protected $data = array();
public function get($name, $default = null) {
$parts = explode('.', $name);
$ns = array_shift($parts);
if (!isset($this->data[$ns])) {
$this->loadNS($ns);
}
$search = $this->data[$ns];
foreach ($parts as $part) {
if (is_array($search) && isset($search[$part])) {
$search = $search[$part];
} else {
return $default;
}
}
return $search;
}
protected loadNS($name) {
$path = PATH_TO_CONFIG . $name . '.php';
if (is_file($path)) {
$this->data[$name] = include($path);
} else {
$this->data[$name] = array();
}
}
}
您可以同样简单地添加集合和保存方法。
保存文件:
public function saveToFile($ns) {
if (!isset($this->data[$ns])) {
$this->loadNS($ns);
}
$out = '<?php return '.var_export($this->data[$ns], true).';';
$path = PATH_TO_CONFIG . $ns . '.php'
file_put_contents($path, $out);
}
结果是一个非常易于维护(因为它只写入文件系统)和易于手动修改(因为它只是 php 代码)用于存储和检索信息的系统。
最重要的是,由于它可以利用操作码缓存,它非常高效,并且根本不会减慢您的页面速度...