germania-kg/salesmen

使用销售人员ID:接口、特性、FilterIterator

2.2.2 2022-03-30 10:16 UTC

README

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

安装

$ composer require germania-kg/salesmen

接口

salesman_id_provider_interface

public function getSalesmanId()

salesman_id_aware_interface

extends SalesmanIdProviderInterface
public function setSalesmanId( $id )

特性

salesman_id_provider_trait

使用此特性的对象将提供一个 salesman_id 属性和一个 getSalesmanId 获取器方法,如以下所示

public $salesman_id;
public function getSalesmanId()

salesman_id_aware_trait

使用此特性的对象将提供 salesman_id_provider_trait 提供的所有内容,并额外提供一个接受任何值的 setSalesmanId 设置器方法;如果提供了 salesman_id_provider_interface,则将调用 getSalesmanId 方法来获取要使用的ID。大致概述

use SalesmanIdProviderTrait;
public function setSalesmanId( $salesman )

示例

<?php
use Germania\Salesmen\SalesmanIdProviderInterface;
use Germania\Salesmen\SalesmanIdProviderTrait;

class Salesman implements SalesmanIdProviderInterface
{
	use SalesmanIdProviderTrait;
	
	public function __construct( $salesman_id )
	{
		$this->salesman_id = $salesman_id;
	}
}

$salesman = new Salesman( 99 );
echo $salesman->getSalesmanId(); // 99
<?php
use Germania\Salesmen\ SalesmanIdAwareInterface;
use Germania\Salesmen\SalesmanIdAwareTrait;

class MyOrder implements SalesmanIdAwareInterface
{
	use SalesmanIdAwareTrait;
}

$order  = new MyOrder;
$order->setSalesmanId( 34 );
echo $order->getSalesmanId(); // 34

salesman_filter_iterator

salesman_filter_iterator 类接受任何 Iterator 集合以及一个销售人员ID(或ID数组)或 SalesmanIdProviderInterface 实例以进行过滤。不是 SalesmanIdProviderInterface 实例的集合项始终被忽略。

迭代器

  • SalesmanIdProviderInterface 的实例

过滤值

  • 整数或字符串ID
  • 整数或字符串ID的数组
  • 一个 SalesmanIdProviderInterface 实例 - 也请参阅问题 #1

示例

<?php
use Germania\Salesmen\SalesmanFilterIterator;

// Prepare some SalesmanIdProviderInterface instances:
$order1 = new MyOrder; 
$order1->setSalesmanId( 1 );

$order2 = new MyOrder; 
$order2->setSalesmanId( 20 );

$order3 = new MyOrder; 
$order4->setSalesmanId( 999 );

$orders = [
	$order1,
	$order2,	
	$order3
];


// ---------------------------------------
// Filter by ID or ID array:
// ---------------------------------------

// should be '1'
$filter = new SalesmanFilterIterator( new \ArrayIterator( $orders ) , 20);
echo iterator_count($filter);

// should be '2'
$filter = new SalesmanFilterIterator( new \ArrayIterator( $orders ), array(20, 999));
echo iterator_count($filter);


// ---------------------------------------
// Filter by SalesmanIdProviderInterface:
// ---------------------------------------

$salesman = new Salesman( 1 );
$filter = new SalesmanFilterIterator( new \ArrayIterator( $orders ), $salesman);

// should be '1'
echo iterator_count($filter);

问题

  • SalesmanFilterIterator 也应接受一个 SalesmanIdProviderInterface 实例数组作为过滤值。请参阅问题 #1

也请参阅完整问题列表。

开发

$ git clone https://github.com/GermaniaKG/Salesmen.git
$ cd Salesmen
$ composer install

单元测试

要么将 phpunit.xml.dist 复制到 phpunit.xml 并根据您的需求进行修改,要么保持不变。像这样运行 PhpUnit

$ composer test
# or
$ vendor/bin/phpunit