I would say, you should have a separate object to validate your object, like so.
PHP Code:
$oRedCarColourValidator = new CarColourValidator(array('colour' => 'red'));
$oCar = new Car('red');
if($oRedCarColourValidator->isValid($oCar))
{
#valid
}
else
{
echo $oRedCarColourValidator->getError(); #Car is not red.
}
PHP Code:
class Car
{
protected $sColour;
public function __construct($sColour)
{
$this->sColour = $sColour;
}
public function getColour()
{
return $this->sColour;
}
}
PHP Code:
class CarColourValidator extends Validator
{
public function isValid($mSubject)
{
if($mSubject->getColour() === $this->getOption('colour'))
{
return true;
}
$this->setError('Car is not red.');
return false;
}
}
PHP Code:
abstract class Validator
{
private $aOptions;
private $sError = null;
/**
*
* @param Array $aOptions
*/
public function __construct($aOptions = array())
{
$this->aOptions = $aOptions;
}
/**
*
* @param String $sName
* @param Mixed $mValue
*/
public function setOption($sName, $mValue)
{
$this->aOptions[$sName] = $mValue;
}
/**
*
* @param String $sName
* @return Mixed
*/
public function getOption($sName)
{
return $this->aOptions[$sName];
}
/**
*
* @param String $sError
*/
protected function setError($sError)
{
$this->sError = $sError;
}
/**
*
* @return String
*/
public function getError()
{
return $this->sError;
}
abstract public function isValid($mSubject);
}
Bookmarks