如何一次尝试捕获多条消息?
try{
if (empty($news_genre)){
throw new Exception('<div class="error">Error 1</div>');
}elseif (strlen($news_title) < 30){
throw new Exception('<div class="error">Error 2</div>');
} elseif (strlen($news_image)< 30){
throw new Exception('<div class="error">Error 3</div>');
} elseif (strlen($news_description)< 500){
throw new Exception('<div class="error">Error 4</div>');
} elseif (count($news_tags) > 5){
throw new Exception('<div class="error">Error 5</div>');
}
} catch (Exception $e) {
die ($e->getMessage());
}
我想在一行中回应所有错误:
//die ($e->getMessage(), $e->getMessage(), $e->getMessage());
<div class="error">Error 1</div>
<div class="error">Error 2</div>
<div class="error">Error 3</div>
<div class="error">Error 4</div>
<div class="error">Error 5</div>
PS 没有不同的阻止块!
答案 0 :(得分:2)
您无法捕获多个例外,因为无法 多个例外。抛出异常后,代码块将以该异常的状态退出。
如果您正在寻找创建验证错误列表,那么您首先不应该使用例外。 (不要使用逻辑流的异常。)您应该只检查逻辑并构建列表。在伪代码中(因为我的PHP生锈到几乎不存在):
if (someCondition()) {
// add error to array
}
if (anotherCondition()) {
// add another error to array
}
// etc.
if (array has values) {
// display validation messages
// halt execution
}
(另请注意,我已将else if
结构更改为多个if
,因为从逻辑上讲,您也只能拥有一条带有else if
结构的消息。)
答案 1 :(得分:0)
您可以将消息存储在一个var中,如果执行了其中一个if语句,则抛出异常。
try{
$msg = false;
if (empty($news_genre))
$msg .= '<div class="error">Error 1</div>';
if (strlen($news_title) < 30)
$msg .= '<div class="error">Error 2</div>';
if (strlen($news_image)< 30)
$msg .= '<div class="error">Error 3</div>';
if (strlen($news_description)< 500)
$msg .= '<div class="error">Error 4</div>';
if (count($news_tags) > 5)
$msg .= '<div class="error">Error 5</div>';
if ($msg)
throw new Exception($msg);
} catch (Exception $e) {
die ($e->getMessage());
}