摩迪利昂 / 可配置
一个使您的类可配置的库
0.7.3
2018-11-19 13:46 UTC
Requires
- php: >=7.2.0
README
可配置
描述
可配置是一个小型库,使每个类可以通过不同的配置对象进行配置。内部创建了一个自定义的配置对象类型,使其更具可重用性。
对 YAML 支持的要求
要使用该软件包与 YAML,您必须在您的安装中至少拥有以下库之一。
Symfony YAML-Component https://github.com/symfony/yaml
Spyc (Simple-PHP-YAML-Class) https://github.com/mustangostang/spyc
PECL YAML https://php.ac.cn/manual/en/book.yaml.php
基本示例
<?php use Mordilion\Configurable\Configurable; use Mordilion\Configurable\Configuration\Configuration; class Something { /** * Use the following traits. */ use Configurable; /** * Default configuration settings. * * @var array */ private $defaults = array( 'setting1' => 'http://www.devjunkie.de', 'setting2' => null, 'setting3' => 12345 ); /** * A public property. * * @var integer */ public $setting3; /** * Constructor. * * The provided $configuration will configure the object. * * @param mixed $configuration * * @return void */ public function __construct($configuration = null) { $this->defaults['setting2'] = new \DateTime('now', new \DateTimeZone('America/Chicago')); $this->setConfiguration(new Configuration($this->defaults)); if ($configuration != null) { $this->addConfiguration(new Configuration($configuration)); } } /** * Sets the value for setting1. * * @param string $value * * @return Something */ public function setSetting1($value) { $this->configuration->set('setting1', $value); return $this; } /** * Sets the value for setting2. * * @param \DateTime $value * * @return Something */ public function setSetting2(\DateTime $value) { $this->configuration->set('setting2', $value); // or $this->configuration->setting2 = $value; return $this; } }
路由示例
使用 __get 和 __set 通过对象直接路由到配置。
<?php use Mordilion\Configurable\Configurable; class Something { /** * Use the following traits. */ use Configurable; /** * A public property. * * @var mixed */ public $property1; /** * Routing requests directly to the configuration if needed. * * @param string $name * * @return mixed */ public function __get($name) { if (property_exists($this, $name) || isset($this->$name)) { return $this->$name; } else if (isset($this->configuration->$name)) { return $this->configuration->$name; } return null; } /** * Routing requests directly to the configuration if needed. * * @param string $name * @param mixed $value * * @return void */ public function __set($name, $value) { if (property_exists($this, $name) || isset($this->$name)) { $this->$name = $value; } else if (isset($this->configuration->$name)) { $this->configuration->$name = $value; } } } // { ... } $object = new Something(); $obejct->setConfiguration(array('property1' => 'some text', 'property2' => 'some other text')); // simple use echo $object->property1 . ' -- ' . $object->property2; // => "some text -- some other text"