说说php的try-catch那些事情
写在前面
首先,区别 Error 和 Exception 两个概念,这是两个不同的东西。错误是不可忽视的,异常/高级别的错误通常会引起程序停止,而低级别的错误如notice等是可选择忽视的,一般不会造成程序停止运行。当然,个人认为,在不区分语境的情况下,有时出错和出问题可以认为是同一个意思,尽管这两者产生的影响程度上有很大的差别。当我们说到抑错机制的时候,很自然的联想到try-catch接下来说的内容以try-catch的某些方面通过问题的形式展开。
喵喵喵???
首先,区别 Error 和 Exception 两个概念,这是两个不同的东西。错误是不可忽视的,异常/高级别的错误通常会引起程序停止,而低级别的错误如notice等是可选择忽视的,一般不会造成程序停止运行。当然,个人认为,在不区分语境的情况下,有时出错和出问题可以认为是同一个意思,尽管这两者产生的影响程度上有很大的差别。当我们说到抑错机制的时候,很自然的联想到try-catch接下来说的内容以try-catch的某些方面通过问题的形式展开。
我遇见不少人都是这样,多层逻辑嵌套,看似条例清晰、逻辑关系明了。实际上读起来真的很费力。看个最简单的例子,一吧友A想要发一个帖子宣传xx产品,需要征求所有吧主(bz1,bz2)一致同意后才可以发帖。
有人可能会这样写:
function getPostAgree(){
$agree = false; //flag
if ($bz1 == "agree){
$agree = true;
if ($bz == "agreem){
$agree = true;
}else{
$agree = false;
}
} else {
$agree = false;
}
return $agree;
}
看上去很自然. 逻辑也很清楚,bz1同意了之后bz2再同意肯定就没啥问题了.
有人会这样写:
function getPostAgree(){
$agree == false; //flag
if($bz1 == 'agree' && $bz2 == "agree"){
$agree = true;
}else{
$agree = false;
}
return $agree;
}
这样看上去逻辑更加清楚了,两个吧主同时同意.
还有第三种 第四种:
function getPostAgree(){
$agree == false; //flag
if($bz1 == 'disagree'){
return $agree;
}
if($bz2 == 'disagree'){
return $agree;
}
return $agree=true;
}
function getPostAgree(){
$agree == false; //flag
$bz = [$bz1,$bz2];
if(!in_array('disagree',$bz)){
$agree=true;
}
return $agree;
以上看上去都行得通,那么现在又多个1个吧主呢?10个呢?50个呢?
第一个嵌套50个if - else
第二个写49个&&
第三个写50个if
第四个,变成50的数组。而且,同时可以分离出所有bz
$bz = [$bz1,$bz2];
function getPostAgree()
{
global $bz;
$agree = false; //flag
$agree == !in_array("disagree", $bz);
return $agree;
}