neovg / php-struct
一个类似于"C struct"的类,具有类型安全的属性和流畅的设置器接口。
1.4.14
2021-11-12 19:15 UTC
Requires
- php: >=7.3
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-13 00:53:45 UTC
README
一个类似于"C struct"的类,具有类型安全的属性和流畅的设置器接口。
概要
/**
* @property int $foo
* @property string $bar
*
* @method $this withFoo(int $value)
* @method $this withBar(string $value)
*/
class DataStruct extends StructAbstract
{
}
$data = DataStruct::createFromJson(
'{"foo":1,"bar":"something"}'
);
$data = DataStruct::createFromArray([
'foo' => 1,
'bar' => 'something',
]);
$data = (new DataStruct())
->withFoo(1)
->withBar('something');
$data = new DataStruct();
$data->foo = 1;
$data->bar = 'something';
echo $data->foo; // '1'
echo $data->bar; // 'something'
echo (string)$data; // '{"foo":1,"bar":"something"}'
描述
一种方便创建严格类型类的方法,用于任意数据结构,无需编写大量的getter和setter。为了更大的方便,设置器可以链式使用。
此外,实例化对象转换为字符串将返回JSON!
工作原理
StructAbstract读取@property-read注解,并创建它们的内部表示,然后由魔法方法call()和get()使用,以模拟严格类型的设置器和可读属性。
属性可用的数据类型
- bool
- int
- double
- string
- array
- object
- callable
存储对象
在Structs中存储对象时,注解中的类型必须是实际的类(或其某些超类),因为传递给设置器的参数将通过instanceof进行验证。
默认值
每个属性的默认值是null。您可以通过添加具有默认值的同名字段(私有或受保护)来覆盖此值。
/**
* @method WithDefaultStruct someproperty(int $value)
*
* @property-read string $someproperty
*/
class WithDefaultStruct extends StructAbstract
{
protected $someproperty = 'default value';
}
$data = new WithDefaultStruct();
echo $data->someproperty; // 'default value'
数组属性
/**
* @property string[] $strings
* @property ChildStruct[] $childs
*/
class ArrayStruct extends StructAbstract
{
}
$array = ArrayStruct::createFromArray([
'strings' => ['foo', 'bar'],
'childs' => [
['property' => 'value1'],
['property' => 'value2'],
],
]);
echo $array->strings[0]; // 'foo'
echo $array->childs[0]->property; // 'value1'