_field = $field; $this->_lambda = $lambda; $this->_message = $message; } function getFailureMessage() { return $this->_message; } function getFields() { return array($this->_field); } function validate(&$table, &$dispatcher) { $value = $table->get($this->_field); //NOTE: This is a by copy on purpose if (!call_user_func($this->_lambda, $value)) { $dispatcher->notifyAll(new FAFailedCriteriaEvent($this)); } } } class FANumericCriteria extends FALambdaCriteria { function FANumericCriteria($field, $message) { parent::construct($field, 'is_numeric', $message); } } class FACompareCriteria extends FACriteria { var $_field1; var $_field2; var $_message; function FACompareCriteria($field1, $field2, $message) { $this->_field1 = $field1; $this->_field2 = $field2; $this->_message = $message; } function getFailureMessage() { return $this->_message; } function getFields() { return array($this->_field1, $this->_field2); } function validate(&$table, &$dispatcher) { if ((string)$table->get($this->_field1) !== (string)$table->get($this->_field2)) { $dispatcher->notifyAll(new FAFailedCriteriaEvent($this)); } } } ?>