germania-kg/retailers

与零售商合作:接口、特性、FilterIterator

2.0.3 2022-03-30 10:05 UTC

This package is auto-updated.

Last update: 2024-08-29 04:48:04 UTC


README

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用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