noflash/waffer

此包已被废弃且不再维护。没有建议的替代包。

它包含您所有的配置...还有枫糖浆!

v1.0.0 2015-07-18 13:18 UTC

This package is auto-updated.

Last update: 2021-03-04 04:41:55 UTC


README

出于历史原因保留了代码。如果您想要现代且优质的东西,请使用 Symfony 配置

Waffer

一个小巧、快速且(如果需要)强大的配置库。它是为了与长时间运行的PHP守护进程一起使用而编写的。它默认支持JSON和序列化配置文件。

常见问题解答

为什么是 Waffer?

当我开始编写这段代码时,我需要一个名称。由于它打算有一个较小的版本和一个较大的版本(扩展它),我借鉴了 Panic Inc. 中的“diet”这个词,并从中得到了 DietCoda 应用程序;)
我仍然在吃带枫糖浆的华夫饼,我笑了起来,并创建了 DietWaffer 类。这个名字一直沿用下来。

没有 XML!

是的,你说得对。我完全同意 Linus 的说法

XML 是有史以来最糟糕的格式

我从未有足够的耐心来处理 DOM 树,即使有 SimpleXML 库。
如果你希望支持 XML,我欢迎你为该特性提交 pull-request。

等等,INI 呢?

INI 格式有很多限制,而且充满了技巧。说实话,Waffer 曾经支持 INI,但由于命名限制,它已经被移除了。
有关更多信息,请参阅 PHP 文档中 parse_ini_string()备注 部分。

使用

使用 Waffer 的每个库都旨在拥有它自己的默认配置。它就像 jQuery 插件一样 - 你可以提供一些额外的选项来覆盖默认配置。Waffer 的单个实例旨在被 注入 到多个对象中,深入到应用程序。

初始化

你可以选择两个类中的一个 - Waffer 和 DietWaffer。第二个类只包含核心配置黑盒,没有任何导出/导入功能。
初始配置数组可以作为构造函数参数指定。

(重新)恢复数据

Waffer 被构建成简单、强大且灵活的工具。它支持许多不同方式获取和存储配置数据。下面的代码示例解释了所有这些方法

$myAwesomeConfiguration = array(
    'version' => 1.1, //This is global configuration option
    'yummyWaffers' => 10,
    'ACME\FooBar' => array( //Configuration for "FooBar" library by ACME
        'version' => M_PI,
        'bakingTemp' => 280,
        'defaultOwner' => 'Mr. Foo'
    )
);

$config = new DietWaffer($myAwesomeConfiguration); //We don't need full Waffer for options below

//Basic usage
echo "Global version: ".$config->storage['version']."\n"; //Fastest but completly non-OO

$config->setVersion(1.2); //Magic setter
echo "New global version: ".$config->getVersion()."\n"; //...with magic getter

$config->yummyWaffers++; //You can also use magic property set
echo "No. of yummy waffers: ".$config->yummyWaffers."\n"; //...and get

//Namespaces
echo "ACME FooBar version: ".$config->storage['ACME\FooBar']['version']."\n";

$config->setVersion(3.1, 'ACME\FooBar'); //Magic setter
echo "New ACME FooBar version: ".$config->getVersion('ACME\FooBar')."\n"; //...with magic getter


//Removing variables
unset($config->yummyWaffers);

//Checking if variable exists
var_dump(
    isset($config->version),
    isset($config->yummyWaffers),
    isset($config->notin)
);

//Let's drive OO teachers crazy ;]
var_dump(
    $config(),
    $config('ACME\FooBar')
);

导入 & 导出

库支持 JSON & (反)序列化 oob。它还处理从文件中加载和保存设置。
让我们通过一段代码来说明一切。

$config = new Waffer($myAwesomeConfiguration);

echo "JSON: ".$config->toJSON()."\n";
echo "Serialized: ".$config->serialize()."\n";
echo "Save to file ".print_r($config->toFile("example.conf"), true)."\n"; //This will save JSON file, you can pass Waffer::FORMAT_SERIAL to use serialization
//You can use fromFile() the same way
echo "PHP array: \n".$config."\n";

库集成

Waffer 内部以大型数组的形式存储配置。按照设计,每个使用 Waffer 的库都应该在其自身的命名空间键下注册其设置,如下所示。

namespace ACME\FooBar;

class FooBar {
    public static $defaultConfigutation = array(
        "welecome" => "Hello %s!"
        "funFacts" => array(
            "There's disease named Maple syrup urine disease",
            "Defibrillated patient isn't going to jump out of the bed (unless you're in Hollywood)"
        )
    );
    
    private $config;
    
    public function __construct(DietWaffer $config) {
        $this->config = $config;
        $this->config->storage[__NAMESPACE__] = array_replace_recursive(self::$defaultConfigutation, (array)@$this->config->storage[__NAMESPACE__]); 
    }
}