摩迪利昂/可配置

一个使您的类可配置的库

0.7.3 2018-11-19 13:46 UTC

This package is auto-updated.

Last update: 2024-09-13 20:43:26 UTC


README

Travis Packagist

可配置

描述

可配置是一个小型库,使每个类可以通过不同的配置对象进行配置。内部创建了一个自定义的配置对象类型,使其更具可重用性。

对 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"