- /**   
-  * The Command abstraction.   
-  * In this case the implementation must return a result,   
-  * sometimes it only has side effects.   
-  */  
- interface Validator   
- {   
-     /**   
-      * The method could have any parameters.   
-      * @param mixed   
-      * @return boolean   
-      */  
-     public function isValid($value);   
- }   
-   
- /**   
-  * ConcreteCommand.   
-  */  
- class MoreThanZeroValidator implements Validator   
- {   
-     public function isValid($value)   
-     {   
-         return $value > 0;   
-     }   
- }   
-   
- /**   
-  * ConcreteCommand.   
-  */  
- class EvenValidator implements Validator   
- {   
-     public function isValid($value)   
-     {   
-         return $value % 2 == 0;   
-     }   
- }   
-   
- /**   
-  * The Invoker. An implementation could store more than one   
-  * Validator if needed.   
-  */  
- class ArrayProcessor   
- {   
-     protected $_rule;   
-   
-     public function __construct (Validator $rule)   
-     {   
-         $this->_rule = $rule;   
-     }   
-   
-     public function-  process (array $numbers)
 
-     {   
-         foreach ($numbers as $n) {   
-             if ($this->_rule->IsValid($n)) {   
-                 echo $n, "\n";   
-             }   
-         }   
-     }   
- }   
-   
- // Client code   
- $processor = new ArrayProcessor(new EvenValidator());   
- $processor->process(array(1, 20, 18, 5, 0, 31, 42));