noflash / waffer
它包含您所有的配置...还有枫糖浆!
Requires
- php: >=5.3.0
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__]); } }