phpextra / common
常用接口和类
Requires (Dev)
- phpextra/qa-tools: ~1.0
This package is not auto-updated.
Last update: 2022-02-01 12:28:59 UTC
README
##使用方法
###Enum (PHPExtra\Type\Enum)
通过创建一个新的类来创建您的第一个枚举类型
class TheGuy extends AbstractEnum { const _default = self::NICE_GUY; const SMART_GUY = 'Mike'; const NICE_GUY = 'Rick'; }
这就是全部。
现在您可以使用它了
$guy = new TheGuy(); echo $guy->getValue(); // returns Rick $mike = new TheGuy(TheGuy::MIKE); echo $mike->getValue(); // returns Mike echo $guy->equals($mike); // returns false
如果没有指定默认值,则必须将其作为构造函数参数设置。如果给定的构造函数值无效,将抛出 \UnexpectedValueException
。
###Collection (PHPExtra\Type\Collection)
通过实现以下接口(\Countable
、\ArrayAccess
、\Iterator
和 \SortableInterface
)来解决几个问题。这使您能够对集合进行计数、使用 foreach
循环、像数组一样访问它(如 $a[1]
)以及对其内容进行排序(如 $a->sort($sorter)
)。除了常规集合之外,还有 LazyCollection
,允许您指定一个闭包,该闭包仅在需要时初始化集合内容。
创建您的第一个集合
$collection = new Collection(); $collection->add('item1'); $collection->add('item2'); $collection->add('item3);
使用它
echo count($collection); // returns 3 echo $collection[0]; // returns "item1" echo $collection->slice(1, 2); // returns Collection with a length of 2 containing item2 and item3. echo $collection->filter(function($element, $offset){ return $offset % 2 == 0; }); // returns sub-collection with all elements with even offset number $collection->sort(SorterInterface $sorter); // sorts collection
延迟集合示例
$lazy = new LazyCollection(function(){ return new Collection(array(1, 2, 3)); }); echo $lazy[2]; // initializes the closure and returns "3"
###UnknownType (PHPExtra\Type\UnknownType)
这种情况不应该发生,但有时会发生 - 您有一个具有许多不同响应类型的方法,但希望像专业人士一样处理它
$messedUpResponse = $api->getMeSomeChickens(); // returns "Chicken" **or** "Collection" **of** "Chickens" **or** "no" as an error response :-) $result = new UnknownType($messedUpResponse); if($result->isCollection()){ $result->getAsCollection()->sort($sorter); ... }elseif($result->isException){ throw $result->getAsException(); ... }
UnknownType 可以扩展和自定义 :-)
###Paginator (PHPExtra\Paginator)
Paginator 与 CollectionInterface 完全兼容。其任务是将大型集合拆分为页面。
$page = 2; $itemsPerPage = 10; $products = new Collection(...); $paginator = new Paginator($products, $page, $itemsPerPage); echo $paginator->getPage(); // returns a collection with size of 10 for current page echo $paginator->getNextPageNumber(); // returns "3" echo $paginator->hasNextPage(); // returns bool true or false
##变更日志
###1.2.x
- 向 Collection 添加了 CollectionInterface::exists(Closure $c) 方法
- 从 Collection 中删除了 Serializable 接口
- 向 LazyCollection 添加了 Serializable 接口
- 为 LazyCollection 添加了弃用标记,它将在 1.3 中变为 final
- 添加了 CollectionProxy 类
- 为集合添加了 CollectionInterface::sort(SorterInterface $sorter)
- 为枚举添加了 EnumInterface::equals(EnumInterface $enum)
- 为未知类型添加了 UnknownType::isSortable()
- 重构了 Enum 类型
- 在枚举类中添加了弃用标记,因为它将在1.3版本中改为抽象。
- 为枚举添加了默认值。
- 现在AbstractEnum::isValid($val)是静态的。
- 添加了AbstractEnum:equals(EnumInterface $enum)。
- 更新了README。
###1.1.1
- Collection::current()现在在空集合中返回null。
###1.1.0
- 添加了PaginatorInterface。
- 为页面号获取器添加了默认、可选的值持有者。
- 在集合中添加了Collection::forAll(Closure $c)方法。
###1.0.3(不能降级)
- 更改了分页器行为 - 如果页面号超出范围或集合为空,则将返回最接近的匹配页面。
- 添加了获取最后一页及其编号的获取器。
###1.0.2(不能降级)
- 修复了分页器页面哈希器,它返回了错误肯定结果。
- 修复了slice()方法,使其在Collections中不使用array_slice。
- 分页器更改;添加了页面、toString方法(返回当前页面编号)的哈希器和获取器,并更改了构造函数。
###1.0.1(不能降级)
- 添加了可以处理大型集合并将它们分成给定长度的页面的分页器。
- 在Collections中的filter()之后重置内部指针。
- 在集合中添加了first()和last()方法。
- 修复了UnknownType中的getAsCollection()方法的异常信息。
###1.0.0
首次发布
安装(Composer)
{ "require": { "phpextra/common":"~1.2" } }
##运行测试
// Windows
composer install & call ./vendor/bin/phpunit.bat ./tests
##贡献
所有代码贡献都必须通过拉取请求进行。Fork项目,创建一个功能分支,并发送给我一个拉取请求。为了确保一致的代码库,您应确保代码遵循编码标准。如果您想帮忙,请查看问题列表。
##要求
有关依赖项的完整列表,请参阅composer.json。
##作者
Jacek Kobus - kobus.jacek@gmail.com
许可信息
See the file LICENSE.txt for copying permission.