php接口过滤器,PHP设计模式-过滤器

适用性

允许我们使用不同的规则过滤某一组对象

代码示例

/**

* 过滤接口

*/

interface FilterInterface

{

/**

* 过滤方法

*

* @param  SportsMan $person 运动员

* @return mixed

*/

public function filter(array $person);

}

/**

* 按运动项目过滤实体

*/

class SportsPerson

{

/**

* 性别

* @var string

*/

private $_gender = '';

/**

* 按照本运动项目过滤

* @var string

*/

private $_sportType = '';

/**

* 构造函数

* @param string $gender

* @param string $sportType

*/

public function __construct($gender='', $sportType='')

{

$this->_gender = $gender;

$this->_sportType = $sportType;

}

/**

* 魔法函数

* @param  string $value

* @return mixed

*/

public function __get($value='')

{

$value = '_' . $value;

return $this->$value;

}

}

/**

* 按性别过滤实体

*/

class FilterGender implements FilterInterface

{

/**

* 按照本性别过滤

* @var string

*/

private $_gender = '';

/**

* 构造函数

* @param string $gender

*/

public function __construct($gender='')

{

$this->_gender = $gender;

}

/**

* 过滤方法

*

* @param  array $persons 运动员集合

* @return mixed

*/

public function filter(array $persons)

{

foreach ($persons as $k => $v) {

if ($v->gender === $this->_gender) {

$personsFilter[] = $persons[$k];

}

}

return $personsFilter;

}

}

/**

* 按运动项目过滤实体

*/

class FilterSportType implements FilterInterface

{

/**

* 按照本运动项目过滤

* @var string

*/

private $_sportType = '';

/**

* 构造函数

* @param string $sportType

*/

public function __construct($sportType='')

{

$this->_sportType = $sportType;

}

/**

* 过滤方法

*

* @param  array $persons 运动员集合

* @return mixed

*/

public function filter(array $persons)

{

foreach ($persons as $k => $v) {

if ($v->sportType === $this->_sportType) {

$personsFilter[] = $persons[$k];

}

}

return $personsFilter;

}

}

try {

// 定义一组运动员

$persons = [];

echo '

'; 
 

$persons[] = new SportsPerson('male', 'basketball');

$persons[] = new SportsPerson('female', 'basketball');

$persons[] = new SportsPerson('male', 'football');

$persons[] = new SportsPerson('female', 'football');

$persons[] = new SportsPerson('male', 'swim');

$persons[] = new SportsPerson('female', 'swim');

// 按过滤男性

$filterGender = new FilterGender('male');

var_dump($filterGender->filter($persons));

// 过滤运动项目篮球

$filterSportType = new FilterSportType('basketball');

var_dump($filterSportType->filter($persons));

} catch (\Exception $e) {

echo $e->getMessage();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值