类可以被认为是做一些事情的花哨的类型,比如验证自己。
abstract class ValidatingType
{
protected $val;
public function __construct($val)
{
if(!self::isValid($val))
{ // complain, perhaps by throwing exception
throw new Exception("No, you can't do that!");
}
$this->val = $val;
}
abstract static protected function isValid($val);
}
我们扩展 ValidatingType 来创建一个验证类型。这迫使我们创建一个 isValid 方法。
class ValidatingNumber extends ValidatingType
{
...
static protected function isValid($val)
{
return is_numeric($val);
}
}
class ValidatingPrimeNumber extends ValidatingNumber
{
/*
* If your PHP doesn't have late-binding statics, then don't make the abstract
* or overridden methods isValid() static.
*/
static protected function isValid($val)
{
return parent::isValid($val)
or self::isPrime($val); // defined separately
}
}
class ValidatingImage extends ValidatingType
{
...
static protected function isValid($val)
{
// figure it out, return boolean
}
}
这种方法的一个优点是您可以继续创建新的验证类型,并且您不会得到一个膨胀的 Is 类。
这种方法有更优雅的变化。这是一个简单的变化。语法可能需要清理。