2010-11-25 81 views
1

有人可以帮助我转换使用if-else编写的以下代码来尝试/ catch。也让我知道在这种情况下trycatch需要或的if-else容易转换if else else try catch

$results = mysql_query($query); 
if(mysql_num_rows($results)!=0) 
{ 
    while(($result = mysql_fetch_row($results))!=FALSE) 
    { 
     $res ="DELETE FROM table1 WHERE id ='".$result['id']."'"; 
     if(mysql_query($res)==false) 
     { 
      echo mysql_error(); 
      exit; 
     } 
    } 
    echo $res ="DELETE FROM table2 WHERE id ='".$id."'"; 
    if(mysql_query($res)!==false) 
    { 
     header("Location:list.php?m=4"); 
    } 
    else 
    { 
     echo mysql_error(); 
     exit; 
    } 
} 
else 
{ 
    echo "Error"; 
} 
+0

http://www.w3schools.com/php/php_exception.asp – ArK 2010-11-25 06:15:51

+0

有你尚未尝试?你不了解什么部分?是的,错误处理是Exceptions的适当用法。 – Matthew 2010-11-25 06:16:26

回答

1

从它的声音,看来你想的try/catch和if-else语句为相同的行为。事实并非如此。 Try catch用于防止发生异常,导致应用程序崩溃或正常处理异常,并执行日志记录并给予用户反馈。 If-else(else if)用于检查应用程序的内部状态,并相应地执行不同的操作。

一般来说,try-catch的效率要比有开关情况或其他方式时效率低。

5

try...catch只有当你的函数抛出异常时才有意义。如果他们不这样做,那么catch就没有什么了。我想这个开始的重构:

$results = mysql_query($query); 
if (!mysql_num_rows($results)) { 
    echo 'No results!'; 
    exit; 
} 

$ids = array(); 
while (($result = mysql_fetch_row($results)) !== false) { 
    $ids[] = $result['id']; 
} 

$ids = array_map('mysql_real_escape_string', $ids); 
$query = "DELETE FROM table1 WHERE id IN ('" . join("','", $ids) . "')"; 
if (!mysql_query($query)) { 
    echo mysql_error(); 
    exit; 
} 

$query = "DELETE FROM table2 WHERE id = '$id'"; 
if (!mysql_query($query)) { 
    echo mysql_error(); 
    exit; 
} 

header("Location: list.php?m=4"); 
exit; 

这能够进一步提高了很多,但它已经在你的面条逻辑的改善。如果你对正确使用异常很感兴趣,你应该首先继续正确使用重复任务的函数(如error, exit部分),然后可能将整个事物重构为类和对象,最后使用异常来在现在嵌套图层。也许开始使用PHP框架来感受整个事物。

把异常转换成上面的代码将很难超过goto多,但只是用于说明目的

try { 

    $results = mysql_query($query); 
    if (!mysql_num_rows($results)) { 
     throw new Exception('No results!'); 
    } 

    $ids = array(); 
    while (($result = mysql_fetch_row($results)) !== false) { 
     $ids[] = $result['id']; 
    } 

    $ids = array_map('mysql_real_escape_string', $ids); 
    $query = "DELETE FROM table1 WHERE id IN ('" . join("','", $ids) . "')"; 
    if (!mysql_query($query)) { 
     throw new Exception(mysql_error()); 
    } 

    $query = "DELETE FROM table2 WHERE id = '$id'"; 
    if (!mysql_query($query)) { 
     throw new Exception(mysql_error()); 
    } 

    header("Location: list.php?m=4"); 
    exit; 

} catch (Exception $e) { 

    echo 'ERROR: ' . $e->getMessage(); 
    exit; 

}