germania-kg / retailers
与零售商合作:接口、特性、FilterIterator
2.0.3
2022-03-30 10:05 UTC
Requires
- php: ^5.6|^7.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^5.7|^6.0|^7.0
README
使用Composer安装
$ composer require germania-kg/retailers
接口
RetailerNumberProviderInterface
public function getRetailerNumber()
RetailerNumberAwareInterface
extends RetailerNumberProviderInterface public function setRetailerNumber( $id )
特性
RetailerNumberProviderTrait
使用此特性的对象将提供 retailer_number
属性和 getRetailerNumber
getter 方法,具体请参考这里
public $retailer_number; public function getRetailerNumber()
RetailerNumberAwareTrait
使用此特性的对象将提供 RetailerNumberProviderInterface 所提供的任何内容,并额外提供 setRetailerNumber
设置方法,该方法接受任何内容;如果在此处提供了 RetailerNumberProviderInterface,则将调用 getRetailerNumber 方法来获取要使用的ID。大致概述
use RetailerNumberProviderTrait; public function setRetailerNumber( $id )
示例
<?php use Germania\Retailers\RetailerNumberProviderInterface; use Germania\Retailers\RetailerNumberProviderTrait; class Retailer implements RetailerNumberProviderInterface { use RetailerNumberProviderTrait; public function __construct( $retailer_number ) { $this->retailer_number = $retailer_number; } } $retailer = new Retailer( 99 ); echo $retailer->getRetailerNumber(); // 99
<?php use Germania\Retailers\RetailerNumberAwareInterface; use Germania\Retailers\RetailerNumberAwareTrait; class MyOrder implements RetailerNumberAwareInterface { use RetailerNumberAwareTrait; } $order = new MyOrder; $order->setRetailerNumber( 34 ); echo $order->getRetailerNumber(); // 34
RetailerFilterIterator
RetailerFilterIterator 类接受任何 Iterator 集合和一个零售商ID(或ID数组)或 RetailerNumberProviderInterface 实例以进行过滤。不是 RetailerNumberProviderInterface 实例的集合项目始终被忽略。
迭代器
- RetailerNumberProviderInterface 的实例
过滤值
- 整数或字符串ID
- 整数或字符串ID的数组
- 一个 RetailerNumberProviderInterface 实例 – 也见 问题 #1
示例
<?php use Germania\Retailers\RetailerFilterIterator; // Prepare some RetailerNumberProviderInterface instances: $order1 = new MyOrder; $order1->setRetailerNumber( 1 ); $order2 = new MyOrder; $order2->setRetailerNumber( 20 ); $order3 = new MyOrder; $order4->setRetailerNumber( 999 ); $orders = [ $order1, $order2, $order3 ]; // --------------------------------------- // Filter by ID or ID array: // --------------------------------------- // should be '1' $filter = new RetailerFilterIterator( new \ArrayIterator( $orders ) , 20); echo iterator_count($filter); // should be '2' $filter = new RetailerFilterIterator( new \ArrayIterator( $orders ), array(20, 999)); echo iterator_count($filter); // --------------------------------------- // Filter by RetailerNumberProviderInterface: // --------------------------------------- $retailer = new Retailer( 1 ); $filter = new RetailerFilterIterator( new \ArrayIterator( $orders ), $retailer); // should be '1' echo iterator_count($filter);
路线图
版本 2.1
- 使用标量类型声明;需要PHP 7.0+
问题
- RetailerFilterIterator 应该也能接受一个 RetailerNumberProviderInterface 实例数组作为过滤值。见 问题 #1。
见 完整问题列表。
开发
$ git clone https://github.com/GermaniaKG/Retailers.git
$ cd Retailers
$ composer install
单元测试
要么将 phpunit.xml.dist
复制到 phpunit.xml
并根据您的需要进行调整,要么保持不变。运行 PhpUnit 测试或 composer 脚本如下
$ composer test # or $ vendor/bin/phpunit