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;
}
http://www.w3schools.com/php/php_exception.asp – ArK 2010-11-25 06:15:51
有你尚未尝试?你不了解什么部分?是的,错误处理是Exceptions的适当用法。 – Matthew 2010-11-25 06:16:26