phpextra/common

此包已被废弃,不再维护。未建议替代包。

常用接口和类

1.1.1 2014-06-23 13:38 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:28:59 UTC


README

## PHP 的常用类和接口 最新稳定版本 总下载量 许可 构建状态 Scrutinizer 代码质量 代码覆盖率 GitTip

##使用方法

###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.