nayjest/manipulator

用于操作 PHP 对象的工具

v3.1.1 2016-09-27 15:52 UTC

This package is auto-updated.

Last update: 2024-09-17 23:27:34 UTC


README

一个小型库,用于操作 PHP 对象。

Build Status Code Coverage Latest Stable Version

SensioLabsInsight

类似于 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 许可下许可。

请参阅许可文件以获取更多信息。