一个try块中的Multiple Exception

时间:2014-09-19 13:11:11

标签: php exception

如何一次尝试捕获多条消息?

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 没有不同的阻止块!

2 个答案:

答案 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());
}