mcustiel / typed-php
此包已被废弃,不再维护。未建议替代包。
此包最新版本(v0.8.0)的许可信息不可用。
PHP中的原始数据类型和类型化数组的对象包装
v0.8.0
2017-03-19 20:59 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ~5.0
This package is auto-updated.
Last update: 2023-07-19 07:35:26 UTC
README
PHP原始类型和类型化数组的不可变对象表示。
动机
在PHP 5.5和5.6版本中,类型提示支持类和数组,但不支持标量类型。在PHP 7版本中,支持标量类型的类型提示,但不支持类型化数组。因此,我为PHP 5创建了标量类型的对象包装,这些包装也可以在PHP 7中使用,同时还创建了类型化数组,可以在PHP 7中使用。这些对象可以扩展以创建适合您领域的自定义ValueObjects。
安装
Composer
"require": { "mcustiel/typed-php": "*" }
如何使用
所有包装都实现了Primitive
接口
interface Primitive { /** * @return mixed */ public function value(); }
同时,它们都通过实现 __toString 魔法方法返回自身作为字符串。因此,您可以直接echo它们。
原始数据类型
- DoubleValue
- IntegerValue
- StringValue
- BooleanValue
数组
有两种基本类型
- PrimitivesArray
- ObjectsArray
PrimitivesArray
PrimitivesArray 对象允许一组变量具有内部PHP类型。已经有三个类在使用它
- DoubleArray
- IntegerArray
- StringArray
- BooleanArray
它们都使用数组作为参数构建。如果数组中有不正确的类型的值,将抛出异常。
ObjectsArray
此类型允许收集给定类的实例。以下是一个创建此类型示例
use Mcustiel\TypedPhp\ValueObjects\Multiple\ObjectsArray; class Foo { private function bar() { echo 'I am Bar'; } } class FooArray extends ObjectsArray { public function __construct(array $array) { parent::__construct(Foo::class, $array); } }
就是这样,您有一个只能接受Foo对象的数组类型。在您的代码中,您可以使用任何FooArray对象作为常规数组。
如果有扩展Foo的类,FooArray将允许它们,因此支持多态。
不可变数组
对于每个数组类型提供者,都有一个不可变版本,允许使用一组值创建,不允许更改。
- ImmutableDoubleArray
- ImmutableIntegerArray
- ImmutableStringArray
- ImmutableBooleanArray
享元实现
提供了一个基本的享元模式实现。它将在多次调用中返回完全相同的值对象。
use Mcustiel\TypedPhp\Values\IntegerCreator; $a = IntegerCreator::instance()->getValueObject(5); $b = IntegerCreator::instance()->getValueObject(5);
在此示例中,$a
和 $b
引用IntegerValue的同一实例。