lukaszmakuch/property-setter

设置已存在对象的属性。

v0.2 2016-04-19 18:16 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:19:50 UTC


README

travis

PropertySetter

设置已存在对象的属性。

用法

不同的设置器

PropertySetter

描述如何使用任何属性设置器。

use lukaszmakuch\PropertySetter\PropertySetter;

/* @var $propetySetter PropertySetter */
$propetySetter->setPropertiesOf($someObject);

SimplePropertySetter

使用某种属性设置策略,将来自值源的值注入到由目标指定器描述的对象中。

use lukaszmakuch\PropertySetter\SimplePropertySetter;
use lukaszmakuch\PropertySetter\SettingStrategy\CallSetterMethod;
use lukaszmakuch\PropertySetter\TargetSpecifier\PickByClass;
use lukaszmakuch\PropertySetter\ValueSource\UseDirectly;

$setter = new SimplePropertySetter(
    new PickByClass(SomeClass::class),
    new CallSetterMethod("setParam"),
    new UseDirectly("param value")
);

SilentPropertySetter

这是一个装饰器,可以防止装饰过的设置器在某个对象不受支持时抛出UnsupportedTarget异常。

use lukaszmakuch\PropertySetter\SilentPropertySetter;
use lukaszmakuch\PropertySetter\PropertySetter;

/* @var $actualSetter PropertySetter */
$silentSetter = new SilentPropertySetter($actualSetter);

SimpleChainOfPropertySetters

它尝试使用所有设置器设置对象的属性。它不会阻止任何异常。

use lukaszmakuch\PropertySetter\SimpleChainOfPropertySetters;
use lukaszmakuch\PropertySetter\PropertySetter;

/* @var $firstSetter PropertySetter */
/* @var $anotherSetter PropertySetter */
$chain = (new SimpleChainOfPropertySetters())
    ->add($firstSetter)
    ->add($anotherSetter);

SilentChainOfPropertySetters

这是一个装饰器,在某个设置器不支持某些类型的对象时忽略这种情况。它防止抛出UnsupportedTarget异常。当其中一个设置器抛出异常时,它将继续尝试使用其他设置器。

use lukaszmakuch\PropertySetter\SilentChainOfPropertySetters;
use lukaszmakuch\PropertySetter\ChainOfPropertySetters;

/* @var $actualChain ChainOfPropertySetters */
$silentChain = new SilentChainOfPropertySetters($actualChain);

设置策略

CallSetterMethod

调用设置器以设置属性。

use lukaszmakuch\PropertySetter\SettingStrategy\CallSetterMethod;

$strategy = new CallSetterMethod("setParam"); //will call setParam

CallOnlyMethodAsSetter

调用设置器以设置属性。

use lukaszmakuch\PropertySetter\SettingStrategy\CallOnlyMethodAsSetter;

interface ObjectThatHasOnlyOnePublicMethod
{
    public function setParam($newValue);
}

$strategy = new CallOnlyMethodAsSetter(ObjectThatHasOnlyOnePublicMethod::class); //will call setParam

目标指定器

PickByClass

通过类选择目标。

use lukaszmakuch\PropertySetter\TargetSpecifier\PickByClass;

$specifier = new PickByClass(\DateTime::class); //will support \DateTime

值源

UseDirectly

简单地保留一些值,在返回之前不对其进行修改。

use lukaszmakuch\PropertySetter\ValueSource\UseDirectly;

$valueSource = new UseDirectly(123); //will return 123

异常

UnableToSetProperty

\lukaszmakuch\PropertySetter\Exception\UnableToSetProperty

它是任何可能由setPropertiesOf方法抛出的异常的父类。当设置器方法抛出异常时,它被封装在这个异常中(并通过调用getPrevious方法变得可用)。

UnableToGetValue

\lukaszmakuch\PropertySetter\Exception\UnableToGetValue

当无法获取值(来自值源)时抛出。它继承自UnableToSetProperty异常。

UnableToGetValue

\lukaszmakuch\PropertySetter\Exception\UnsupportedTarget

当尝试设置不支持的对象的属性时抛出。它继承自UnableToSetProperty异常。

安装

使用composer获取最新版本

$ composer require lukaszmakuch/property-setter