interface User {
public function getEmail();
public function getName();
public function getAge();
}
class Employee implements User {
public function getEmail() {
// Implementation...
}
public function getAge() {
// Implementation...
}
}
class UsersCollection implements \Iterator {
// Implementation...
}
interface UserList {
public function getUsers();
}
class Emloyees implements UserList {
public function getUsers() {
$users = new UsersCollection();
//...
return $users;
}
}
class Directors implements UserList {
public function getUsers() {
$users = array();
//...
return $users;
}
}
interface LoggerProcessor {
public function log(LoggerInterface $logger);
}
class XmlLogger implements LoggerInterface {
// Implementation...
}
class JsonLogger implements LoggerInterface {
// Implementation...
}
class FileLogger implements LoggerInterface {
// Implementation...
}
class Processor implements LoggerProcessor {
public function log(LoggerInterface $logger) {
if ($logger instanceof XmlLogger) {
throw new \Exception('This processor does not work with XmlLogger');
} else {
// Implementation...
}
}
}