simondeeley / tuple
一个可扩展、可重用的PHP元组对象
Requires
- php: ~7.1
- simondeeley/type: ~1.1
README
此包为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);
除了最大长度值,您还可以指定最小长度值。通过将这两个值设为相同,您实际上为元组可以有的参数数量施加了精确要求。这对于创建真正符合数学形式的元组非常有用,这又引出了...
示例元组
此包提供了两个预构建的元组,即Single
和Pair
,分别对应于Single
和Pair
,它们分别提供用于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
探索源代码以了解比较是如何进行的,或者了解基本元组类是如何构建的。