dmytrof / array-convertible
库帮助将对象转换为数组
v2.2
2024-02-07 16:47 UTC
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^8.3 || ^9.1
- slevomat/coding-standard: ^8.14
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.1
README
====================
此库可以帮助您将对象转换为数组
安装
$ composer require dmytrof/array-convertible
用法
支持的属性类型:array
、bool
、float
、int
、string
、null
、ArrayConvertibleInterface
示例 1
<?php
use Dmytrof\ArrayConvertible\ToArrayConvertibleInterface;
use Dmytrof\ArrayConvertible\Traits\ToArrayConvertibleTrait;
class SomeClass implements ToArrayConvertibleInterface
{
use ToArrayConvertibleTrait;
public $foo = 1;
protected $bar = 'bar';
private $baz = [
'hello' => 'world',
4,
null,
];
}
$obj = new SomeClass();
print_r($obj->toArray());
结果
[
'foo' => 1,
'bar' => 'bar',
'baz' => [
'hello' => 'world',
4,
null,
],
]
示例 2(排除不需要的属性)
要从toArray结果中排除某些属性,请将const TO_ARRAY_NOT_CONVERTIBLE_PROPERTIES
或 ARRAY_NOT_CONVERTIBLE_PROPERTIES
添加到您的类中,或者在您的类中重新定义 getToArrayNotConvertibleProperties
方法。
<?php
use Dmytrof\ArrayConvertible\ToArrayConvertibleInterface;
use Dmytrof\ArrayConvertible\Traits\ToArrayConvertibleTrait;
class SomeClass implements ToArrayConvertibleInterface
{
use ToArrayConvertibleTrait;
private const ARRAY_NOT_CONVERTIBLE_PROPERTIES = ['notConvertibleProperty'];
public $foo = 1;
protected $bar = 'bar';
private $baz = [
'hello' => 'world',
4,
null,
];
private $notConvertibleProperty; // Must be avoided in toArray
}
$obj = new SomeClass();
print_r($obj->toArray());
结果
[
'foo' => 1,
'bar' => 'bar',
'baz' => [
'hello' => 'world',
4,
null,
],
]
示例 3(扩展以转换不支持类型的属性)
要转换不支持类型的属性,请扩展方法 convertToArrayValue
。
<?php
use Dmytrof\ArrayConvertible\ToArrayConvertibleInterface;
use Dmytrof\ArrayConvertible\Traits\ToArrayConvertibleTrait;
class SomeClass implements ToArrayConvertibleInterface
{
use ToArrayConvertibleTrait {
convertToArrayValue as private __convertToArrayValue;
}
private const TO_ARRAY_NOT_CONVERTIBLE_PROPERTIES = ['notConvertibleProperty'];
public $foo = 1;
protected $bar = 'bar';
private $baz = [
'hello' => 'world',
4,
null,
];
private $closure;
private $notConvertibleProperty; // Must be avoided in toArray
public function __construct()
{
$this->closure = function() {
return 55;
};
}
public function convertToArrayValue($value, string $property = null)
{
try {
return $this->__convertToArrayValue($value, $property);
} catch (ToArrayConvertibleException $e) {
if ($value instanceof \Closure) {
return $value->call($this);
}
throw $e;
}
}
};
$obj = new SomeClass();
print_r($obj->toArray());
结果
[
'foo' => 1,
'bar' => 'bar',
'baz' => [
'hello' => 'world',
4,
null,
],
'closure' => 55,
]