chris-kruining/utilities

此包已被弃用且不再维护。未建议替代包。

适用于PHP 7.1及以上的工具

0.2.32 2022-02-17 10:09 UTC

README

Latest Stable Version Latest Unstable Version License Maintainability Test Coverage SensioLabsInsight

工具

一些PHP工具,没有什么特别之处,没有新意,只是符合我的口味

安装

通过composer安装,composer require chris-kruining/utilities

使用

目前库的主要组件是CollectionCollection的目标是为数组函数提供一个面向对象的接口。它还具有一些额外的功能,如方法链和linq-esc实现(尚未完成),以便您可以像与数据库表交互一样与Collection交互

例如

CPB\Utilities\Collections\Collection::from([ 'these', 'are', null, null, 'some', null, 'test', 'values', null ])
  ->filter()
  ->toString(' ');

将产生

'these are some test values'

这与

join(' ', array_filter([ 'these', 'are', null, null, 'some', null, 'test', 'values', null ]));

我同意,纯天然的方法现在更简洁,但真正的优势在于开始添加回调并增加链长度时

CPB\Utilities\Collections\Collection::from([ 'these', '', '', 'are', null, 'some', null, 'test', '', 'values', '' ])
  ->filter(fn($v) => $v !== null && strlen($v) > 0)
  ->map(fn($k, $v) => $k . '::' . $v)
  ->toString('|');

将产生

'0::these|1::are|2::some|3::test|4::values'

这与

$filtered = array_filter(
  [ 'these', '', '', 'are', null, 'some', null, 'test', '', 'values', '' ], 
  fn($v) => $v !== null && strlen($v) > 0
);

join('|', array_map(fn($k, $v) => $k . '::' . $v, array_keys($filtered), $filtered));

如您所见,集合版本保持了可读性,而纯天然版本在我的看法中失去了它的魅力,因为为了实现一个单一目标,您需要将它分散在多个变量中

路线图

  • 实现Collection的基本功能
  • 增加Collection的功能:P
  • 将功能拆分到继承树中
  • 将延迟模式从Collection拆分到LazyCollection中,并将PHP的数组函数实现为生成器
  • 完成继承结构
  • 实现LazyCollection
  • (更好的)在新类中实现Queryable接口,以便Collection不会变得臃肿