As a simpler example, Strategy.php shows a user list class that provides a method for finding a set of users based on a plug-and-play set of strategies.
Strategy.php
<?php
interface IStrategy {
function filter($record);
}
class FindAfterStrategy implements IStrategy {
private $_name;
public function __construct($name) {
$this->_name = $name;
}
public function filter($record) {
return strcmp($this->_name, $record) <= 0; } } class RandomStrategy implements IStrategy { public function filter($record) { return rand(0, 1) >= 0.5;
}
}
class UserList {
private $_list = array();
public function __construct($names) {
if ($names != null) {
foreach($names as $name) {
$this->_list []= $name;
}
}
}
public function add($name) {
$this->_list []= $name;
}
public function find($filter) {
$recs = array();
foreach($this->_list as $user) {
if ($filter->filter($user))
$recs []= $user;
}
return $recs;
}
}
$ul = new UserList(array("Andy", "Jack", "Lori", "Megan"));
$f1 = $ul->find( new FindAfterStrategy("J") );
print_r($f1);
$f2 = $ul->find(new RandomStrategy());
print_r($f2);
?>