一个可扩展、可重用的PHP元组对象

v1.1.2 2017-12-04 16:20 UTC

This package is auto-updated.

Last update: 2024-09-20 23:54:10 UTC


README

License Latest Stable Version Latest Unstable Version Total Downloads Build Status Scrutinizer Code Quality Code Coverage

此包为PHP提供了一个元组类型对象。它基于simondeeley\Type包,该包提供不可变对象。

数学中,一个元组是有限有序的元素列表(序列)。一个n-元组是一个包含n个元素(或有序列表)的序列,其中n是一个非负整数。

维基百科

元组的例子可以是[1, 2, 3, 4, 5]。元组中元素的顺序很重要,所以如果集合'A'是[1, 2, 3],而'B'也是[1, 2, 3],那么A等于B。然而,如果我们有另一个集合'C',它是[3, 2, 1],那么这就不等于A(或B)。

这个包起源于对创建精美、可重复使用的'样板'代码的热爱,这些代码可以在任何数量简单和复杂对象中反复使用。这个包中使用的多数想法都围绕着创建最基础的PHP对象——一个不可变且不会改变的对象。问题是,PHP有一些“魔法方法”,虽然对于方法覆盖很好,但对于确保不可变状态则不那么理想。这个包旨在解决这个问题,并提供一些基类,允许您构建易于使用的不可变类。

要求

  • PHP >= 7.1.0

安装

composer require simondeeley/tuple

用法

创建自己的元组对象

use simondeeley\Tuple;

class MyTuple extends Tuple
{
    //...
}

这是创建元组的起点。默认情况下,您可以在元组对象中包含任何数量的项目(直到PHP的PHP_INT_MAX值限制)。您可以覆盖此限制,创建自己的最大长度元组。

让我们创建一个简单的元组,称为对(pair)。不出所料,它最多只能有两个项目。

use simondeeley\Tuple;

class Pair extends Tuple
{
    const MAX_LENGTH = 2;
}

现在我们有了一个新的类,我们可以创建无数的对型对象...

$numeric = new Pair(1, 2);
$strings = new Pair('A', 'B');
$mixed = new Pair(1024, 'FooBar');
$objects = new Pair($numeric, $strings);

除了最大长度值,您还可以指定最小长度值。通过将这两个值设为相同,您实际上为元组可以有的参数数量施加了精确要求。这对于创建真正符合数学形式的元组非常有用,这又引出了...

示例元组

此包提供了两个预构建的元组,即SinglePair,分别对应于SinglePair,它们分别提供用于1-元组和2-元组对象的功能。使用它们非常简单

use simondeeley\Tuples\Single;
use simondeeley\Tuples\Pair;

$single = new Single('foo'); // Can only ever have one argument
$pair = new Pair(10, 20); // Can only ever have exactly two arguments

测试相等性

基本元组实现了TypeEquality接口,该接口来自simondeeley\Type包。使用这个相等性检查,我们可以比较两个元组。继续上面的Pair示例,我们可以做以下操作

$foo = new Pair(1, 2);
$bar = new Pair(1, 2);
$baz = new Pair(2, 1);

$foo->equals($bar); // Returns true
$foo->equals($baz); // Returns false

探索源代码以了解比较是如何进行的,或者了解基本元组类是如何构建的。