如果save() 遇到任何问题,我会抛出异常。
如果您想提供一组验证错误,您可以继承 Exception 并提供一种存储验证错误的机制。
自定义 Exception 子类还可以帮助您区分代码显式抛出的异常(您希望捕获)和您没有预料到的异常(应该是致命的)。
这是子类:
class UserException extends Exception
{
private $userMessages;
public function __construct($message = "", $code = 0, Exception $previous = null, array $userMessages = null)
{
parent::__construct($message, $code, $previous);
if ($userMessages === null) {
$this->userMessages = array();
} else {
$this->userMessages = $userMessages;
}
}
public function getUserMessages()
{
return $this->userMessages;
}
}
这是 User 类的愚蠢版本,它总是在 save() 上引发异常。
class User
{
public function save()
{
$userMessages = array(
'Your password is wrong',
'Your username is silly',
'Your favorite color is ugly'
);
throw new UserException('User Errors', 0 , null, $userMessages);
}
}
使用它:
$user = new User();
try {
$user->save();
} catch (UserException $e) {
foreach ($e->getUserMessages() as $message) {
print $message . "\n";
}
}
您还可以通过使用分号分隔的消息列表填充异常的 $message 来完成类似的操作。您甚至可以为错误类型构建一个常量列表,然后将它们组合为位掩码并将其用于异常的 $code。这些选项的优点是您将使用内置成员而不添加任何额外内容。
更多关于例外的信息:
http://php.net/manual/en/language.exceptions.php