m22 / object-array
0.1.1
2024-09-11 17:42 UTC
Requires
- php: ^8.3
Requires (Dev)
- nette/php-generator: ^4.1
- phpunit/phpunit: ^11.2
README
允许数组像对象一样工作。
使用方法链而不是嵌套函数。
use M22\ObjectArray as A;
$a = new A(['a', 'b', 'c']);
$a->diffAssoc($array1)
->plus($array2)
->sort()
->map($callback1)
->filter($callback2)
->keys()
// ...
$count_letters = A::fromRange('a', 'z')->fillKeys(0);
$count_letters->t++;
$directories = A::fromExplode('/', $path);
最适合用作Composer库。
要求
- PHP ≥ 8.3
- Composer
安装
要将此库添加到您的Composer项目中
composer require m22/object-array
使用
有几种方法可以实例化一个新的ObjectArray
$a = new ObjectArray($array_or_object);
$b = ObjectArray::from($array_or_object);
$c = ObjectArray::fromFunction($with_arguments_or_without);
其中fromFunction()
不是一个真实的方法,将其中的Function
部分替换为任何现有的函数,通常返回一个数组或一个对象,并带有相应的参数。例如,fromStrSplit($string, $length)
。然后该函数的结果将作为构造函数的内部输入。方法可以接受其他ObjectArray实例作为参数而不是数组。
如果是从数组实例化,它的副本将存储在新的ObjectArray中。如果是从对象实例化,则有一些特殊处理。
- 如果是另一个ObjectArray实例或\ArrayObject实例,其内部数组的副本将存储在新的ObjectArray中。
- 如果是\Traversable实例,则存储其迭代器的副本。
- 否则,存储定义的可访问的非静态对象属性的关联数组。
之后,使用任何接受数组参数的函数作为ObjectArray方法,而不需要提供数组参数。例如
$object_array->filter($callback)
类似于array_filter($array, $callback)
,$object_array->diffKey($array2)
类似于array_diff_key($array, $array2)
,$object_array->reset()
类似于reset($array)
等。
如果该函数返回一个数组,ObjectArray实例将用该函数的结果替换其内部数组,并返回自身以进行链式调用。否则,它返回函数的结果。方法可以接受其他ObjectArray实例作为参数而不是数组:$object_array->diffKey($object_array2)
。
ObjectArray的内部数组存储在公共array
属性($object_array->array
)中,因此可以在任何时候访问或覆盖。
还有其他情况下,ObjectArray实例的行为与其构造的数组相同
- 使用方括号语法访问/创建/修改数组元素(这些操作中的一些也可以使用对象->属性语法完成)
$a = new ObjectArray(['a', $b, 'C' => $c]);
$a[1] === $b; // True.
$a['C'] === $c; // True.
$a[] = 'd';
$a['E'] = 1;
$a['E']++;
isset($a[0]);
unset($a['C']);
- 数组解构
[$a, $b, $c] = new ObjectArray([1, 2, 3]);
['a' => $a, 'b' => $b] = new ObjectArray(['a' => 1, 'b' => 2])
- 数组解包
$array = [...ObjectArray::from(['a', 'b', 'c'])];
- 遍历
foreach (ObjectArray::from(['a' => 1, 'b' => 2]) as $key => $value)
- JSON编码
json_encode(new ObjectArray($array)) === json_encode($array); // True.
开发
当推出新的主要(或次要)PHP版本时,需要重新生成ObjectArray方法。
- 在整个项目中更新PHP版本(composer.*, README等)
- 在
MethodsGenerator
类中审查/更新CORE_MODULES
列表。 - 运行
composer generate
。 - 创建新的git分支,在那里提交更改,并添加标签。