Skip to content

Instantly share code, notes, and snippets.

@phptuts
Created February 15, 2019 05:04
Show Gist options
  • Save phptuts/24342e4ab30e6b191a5525b45ea02d6e to your computer and use it in GitHub Desktop.
Save phptuts/24342e4ab30e6b191a5525b45ea02d6e to your computer and use it in GitHub Desktop.
PHP Decorator Pattern
<?php
interface FilterNumber {
/**
* @return @array
*/
public function filter();
}
class Results implements FilterNumber {
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function filter()
{
return $this->data;
}
}
class FilterNumberEvenNumber implements FilterNumber {
/**
* @var FilterNumber
*/
private $filter;
public function __construct(FilterNumber $filter)
{
$this->filter = $filter;
}
public function filter()
{
return array_filter($this->filter->filter(), function($num) {
return $num % 2 == 0;
});
}
}
class FilterNumberLessThan10 implements FilterNumber {
/**
* @var FilterNumber
*/
private $filter;
public function __construct(FilterNumber $filter)
{
$this->filter = $filter;
}
public function filter()
{
return array_filter($this->filter->filter(), function($num) {
return $num < 10;
});
}
}
var_dump((new FilterNumberLessThan10(new FilterNumberEvenNumber(new Results([2,3,4,5,6,7, 234, 23,434,9]))))->filter());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment