更好的解决方案
许多其他配置存储格式更适合这种事情。查看文件返回php
数组、、、ini
或json
。xml
yaml
“PHP
文件返回数组”是一个简单的 PHP 文件,看起来像这样
return(
array(
'config_key' => 'config_value'
)
);
?>
当您包含此文件时,您的代码可以检索此文件的返回值:$x = include('file.php');
并且$x
将在数组中包含这些值。
INI
为人类阅读或书写简单直观。它的结构有限。PHP 可以使用一个函数读取它,但它仅在单独的(非默认)包中具有写入功能。这意味着您必须自己生成 ini 文件。
JSON
对于人类来说,阅读或写作“相当”简单直观。它具有灵活的结构可扩展结构。JSON
PHP 只需使用几个函数就可以读取和写入文件。不幸的是,PHP 不保留JSON
漂亮的打印格式,因此在您覆盖文件后,它将全部在一行中,之后更难阅读。
XML
对于人类来说阅读起来简单直观,它可以提供非常丰富的信息,因为它对所有内容都非常冗长。I 的结构几乎与它一样灵活,JSON
并且是可扩展的。PHP 可以读取和写入,XML
但这样做意味着使用几行代码(简单的东西是 5-10 行)。
YAML
是另一个易于阅读和编写的选项,PHP 没有直接YAML
支持,但还有其他选项(见下文)。它的结构灵活且可扩展。对我个人来说,理解YAML
不太直观。
Zend_Config
可用作读取/写入上述任何格式的接口,并可用于抽象文件格式本身并为您的应用程序提供与格式无关的配置处理方式。
您还可以使用数据库来存储您的配置或一个单独的 SQLite 数据库,专门用于存储一般配置 - 这通常用于需要以细粒度的可搜索格式保留许多配置,以允许各种类型的分层覆盖(例如。 :一般默认值、控制器默认值、动作默认值、特殊情况默认值)。
如何在 PHP 中做到这一点
您不需要像@geomagas 所说的那样创建语言解析器。使用include
orrequire
就足够了,PHP 解释器会将“新”类加载到内存中并确保它可用。
您需要做的就是创建一个模板文件来替换一些值,例如:
<?php
class WebConfig {
public static $WEBPATH = '$_replace_webpath';
public static $ACCOUNTPATH = '$_replace_accountpath';
public static $INFO = '$_replace_info';
const ACCOUNT_STATUS = '$_replace_account_status';
const ENABLE_SEARCH = '$_replace_enable_search';
}
然后加载读取文件,并将其替换为当前值,例如:
$config_template = file_get_contents('/path/to/config/template.php.template');
str_replace(
array('$_replace_webpath' ... ),
array('/customers' ... ),
$config_template
);
PrestaShop
使用 PHP 文件进行配置。它会在需要时重写它们。