nayjest / manipulator
用于操作 PHP 对象的工具
Requires
- php: >=5.4
- nayjest/str-case-converter: ^1
Requires (Dev)
- phpunit/phpunit: ^4||^5
README
一个小型库,用于操作 PHP 对象。
类似于 symfony/property-access,但功能更丰富,速度更快(不使用反射),且没有过度设计(约 300 行代码,少量函数)。
要求
- PHP 5.4+ (支持 hhvm & php7)
安装
推荐通过 Composer 安装此组件。
运行以下命令
composer require nayjest/manipulator
用法
函数 mp\instantiate
使用指定的构造函数参数创建类实例。
参数
- string $class — 目标类名
- array $arguments — 构造函数参数(可选)
返回值
函数返回实例化对象
示例
$user = \mp\instantiate(MyApp\User::class, [$firstArgument, $secondArgument]);
函数 mp\setPublicProperties
将数组中的值分配给目标对象的现有公共属性。
默认情况下,此函数忽略目标对象中没有对应属性的字段,但可以通过将 TRUE 传递给第三个参数来更改此行为。
参数
- object $targetObject — 目标对象
- array $fields — 要分配的字段,键必须与目标对象属性名相同
- bool $createProperties — (可选,默认值:false)如果值为 TRUE,则允许在目标对象中创建新属性
返回值
函数返回包含成功分配属性名称的数组。
函数 mp\setValuesUsingSetters
使用设置器将数组中的值分配给目标对象的对应属性。
此函数与 mp\setPublicProperties()
类似,但使用设置器方法而不是公共属性。
字段名可以是蛇形或驼峰式,它将被转换为驼峰式并以前缀 'set' 开头,以检查目标对象中是否存在相应的设置器。
目标对象中没有相应设置器的字段将被忽略。
此函数不支持使用 __set() PHP 方法创建的魔法设置器。
参数
- object $instance — 目标对象
- array $fields — 要分配的字段,键用于检查目标对象中是否存在相应的设置器
返回值
函数返回包含成功分配属性名称的数组。
示例
use mp; class Target { private $somePropery; public function setSomeProperty($value) { $this->someProperty = $value; } public function getSomeProperty() { return $this->someProperty; } } $target = new Target; $result = mp\setValuesUsingSetters($target, [ 'some_property' => 1, // 'someProperty' => 1 will also work 'some_other_property' => 2 ]); # $target->setSomeProperty(1) will be called. # Value of 'some_other_property' will be ignored since $target has no 'setSomeOtherProperty' setter. echo $target->getSomeProperty(); // 1 var_dump($result); // array(0 => 'some_property')
函数 mp\setValues
将 $fields 数组中的值分配给 $target。目标可以是对象或数组。
默认情况下,mp\setValues
会忽略目标对象中没有对应属性或设置器的字段,但如果使用 MP_CREATE_PROPERTIES 选项,则可以更改此行为。
可以通过移除 MP_USE_SETTERS 选项来禁用使用设置器分配值(默认启用)。
当目标为数组时,mp\setValues
将调用 array_merge PHP 函数。
参数
- object|array &$target — 目标对象或数组
- array $fields — 要分配的字段
- int $options (可选,默认值: MP_USE_SETTERS) 支持的选项:MP_USE_SETTERS, MP_CREATE_PROPERTIES
返回值
函数返回包含成功分配属性名称的数组。
示例
use mp; class Target { private $property1; public $property2; public function setProperty1($value) { $this->property1 = $value; } } $target1 = new Target; $target2 = new Target; $target3 = new Target; $target4 = new Target; $fieldsToSet = [ 'property1' => 1, 'property2' => 2, 'property3' => 3, ]; $result1 = mp\setValues($target1, $fieldsToSet); // MP_USE_SETTERS by default $result2 = mp\setValues($target1, $fieldsToSet, MP_USE_SETTERS | MP_CREATE_PROPERTIES); $result3 = mp\setValues($target1, $fieldsToSet, MP_CREATE_PROPERTIES); $result4 = mp\setValues($target1, $fieldsToSet, 0);
结果
函数 mp\getWritable
返回对象和类或数组中的可写属性名称。
仅考虑公共对象属性和具有设置器的属性为可写。
对于设置器,此函数将根据设置器名称返回属性名称(设置器名称转换为蛇形,'set' 前缀被移除)。
可以通过指定第二个参数为 FALSE 来禁用通过设置器检测属性。
参数
- object|string|array $target — 对象或类名或数组
- bool $useSetters — (可选,默认值:true)如果为真,则将具有设置器的属性添加到结果中
返回值
包含可写属性名称的数组。
函数 mp\getMethodsPrefixedBy
返回以指定关键字开头且后跟大写字母的方法名。
参数
- string $keyword — 方法名前缀
- object|string $target — 对象或类名
返回值
包含方法名的数组。
示例
class MyClass { public function getProperty1(){}; public function getProperty2(){}; } $objectMethodNames = \mp\getMethodsPrefixedBy('get', $obj); // will return methods of $obj that looks like getters $classMethodNames = \mp\getMethodsPrefixedBy('get', 'MyClass'); // will return methods of 'MyClass' class that looks like getters. // $classMethodNames will contain ['getProperty1', 'getProperty2']
函数 mp\getSetters
返回看起来像设置器的方法名。
参数
- object|string $target — 对象或类名
返回值
包含方法名的数组。
函数 mp\getGetters
返回看起来像设置器的方法名。
参数
- object|string $target — 对象或类名
返回值
包含方法名的数组。
函数 mp\getValues
返回指定在 $propertyNames 参数中的对象属性或数组元素的值。
此函数支持获取器,即目标对象的 getSomeValue() 方法返回的值可以请求为 'some_value' 属性。
参数
- object|array $src
- string[] $propertyNames
返回值
包含所需值的数组。
函数 mp\getValue
从对象或数组中提取指定的属性/字段/方法名。此函数支持属性路径(prop1.prop2.prop3)和获取器。
- 对于 $propertyName = 'prop_name',此函数将按照以下顺序从
$src['prop_name']
$src->prop_name
$src->getPropName()
$src->prop_name()
$src->isPropName()
参数
- array|object $src
- string $propertyName
- mixed $default — (可选,默认值: null) 默认值
- string|null $delimiter — (可选,默认值: '.') 用于指定属性路径
函数 mp\getValueByRef
如果可能,通过引用从对象或数组中提取指定的属性/字段/方法名。此函数类似于 mp\getValue
,唯一的区别是如果可能,值将通过引用返回。
函数 mp\setValue
分配值,支持属性路径(prop1.prop2.prop3)。
参数
- array|object &$target
- string $propertyName
- mixed $value
- string|null $delimiter — (可选,默认值: '.') 用于指定属性路径
返回值
此函数如果成功分配值则返回 TRUE,否则返回 FALSE
测试
此包包含 PhpUnit 测试。
运行测试的命令
composer test
贡献
许可
© 2014 — 2016 Vitalii Stepanenko
在 MIT 许可下许可。
请参阅许可文件以获取更多信息。