mcustiel/typed-php

此包已被废弃,不再维护。未建议替代包。
此包最新版本(v0.8.0)的许可信息不可用。

PHP中的原始数据类型和类型化数组的对象包装

v0.8.0 2017-03-19 20:59 UTC

This package is auto-updated.

Last update: 2023-07-19 07:35:26 UTC


README

PHP原始类型和类型化数组的不可变对象表示。

Build Status Code Coverage Scrutinizer Code Quality

动机

在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的同一实例。