PHP分外与拍卖

1.怎么样是至极

  极度指的是程序运营中发生的某个我们不期待发生的政工。程序产生错误,那明明是大家不愿意爆发的作业,所以非凡包罗的限制实际上要比错误更宽广一些。

  比如函数得到了2个大家预料之外的参数,这便是二个尤其,而非错误。

2.10分处理

 1 <?php
 2     class myday
 3     {
 4         public function getup($f=1)
 5         {
 6             if($f)
 7             {
 8                 echo "正常起床<br>";
 9             }
10             else
11             {
12                 echo "我起不来<br>";
13                 echo "打电话请假吧";
14             }
15         }
16         public function gotowork($f=1)
17         {
18             if($f==1)
19             {
20                 echo "步行去上班<br>";
21             }
22             elseif ($f==2) 
23             {
24                 echo "坐地铁去上班<br>";
25             }
26             elseif ($f==3) 
27             {
28                 echo "做出租去上班<br>";
29             }
30             else
31             {
32                 echo "我不知道怎么去上班<br>";
33                 echo "打电话请假";
34             }
35         }
36         public function work($f=1)
37         {
38             if($f)
39             {
40                 echo "到达公司,开始工作<br>";
41             }
42             else
43             {
44                 echo "没能到达公司<br>";
45                 echo "打电话请假吧";
46             }
47         }
48     };
49     $p=new myday();
50     $p->getup();
51     $p->gotowork();
52     $p->work();
53 ?>

 

   看上边代码,没有怎么值得注意的对吗。其实那段代码中已经有了拾分处理的构思了。每3个esle从句,实际上都以三个那多少个处理,用于拍卖3个大家不指望得到的参数。

  可是如此做是不够好的,假使大家期待将相当的处理从函数体类分离出来,应该这么做

 1 <?php
 2     class myday
 3     {
 4         public function getup($f=1)
 5         {
 6             if($f)
 7             {
 8                 echo "正常起床<br>";
 9             }
10             else
11             {
12                 throw new Exception("没能正常起床", 1);
13                 
14             }
15         }
16         public function gotowork($f=1)
17         {
18             if($f==1)
19             {
20                 echo "步行去上班<br>";
21             }
22             elseif ($f==2) 
23             {
24                 echo "坐地铁去上班<br>";
25             }
26             elseif ($f==3) 
27             {
28                 echo "做出租去上班<br>";
29             }
30             else
31             {
32                 throw new Exception("不知道怎么去上班", 1);
33             }
34         }
35         public function work($f=1)
36         {
37             if($f)
38             {
39                 echo "到达公司,开始工作<br>";
40             }
41             else
42             {
43                 throw new Exception("没到达公司", 1);
44             }
45         }
46     };
47     $p=new myday();
48     try
49     {
50         $p->getup();
51         $p->gotowork(0);
52         $p->work();
53     }
54     catch(Exception $e)
55     {    
56         echo $e->getMessage();
57         echo "打电话请假";
58     }
59 
60     
61 ?>

 

  这样一来,只须求在函数体中做1个百般的判断,而相当的处理就足以在函数体之外举办了。

  但是上面,对于发生的卓殊我们都有平等的处理方法,就是“打电话请假”,那么只要对于分歧的十二分有例外的拍卖该怎么办呢?

  是的,你应当想到了,多些多少个try{}catch{}从句就足以了

 1     try
 2     {
 3         $p->getup();
 4     }
 5     catch(Exception $e)
 6     {    
 7         echo $e->getMessage();
 8         echo "不能起床,解决办法";
 9     }
10     try
11     {
12         $p->gotowork();
13     }
14     catch(Exception $e)
15     {    
16         echo $e->getMessage();
17         echo "不知道坐车,解决办法";
18     }
19 
20     try
21     {        
22         $p->gotowork(0);
23     }
24     catch(Exception $e)
25     {    
26         echo $e->getMessage();
27         echo "没能到公司,解决办法";
28     }

   不过那并不是很好的点子,更切合逻辑的主意是,对于差别的万分抛出不一样的万分对象

<?php
    class getupex extends Exception
    {

        public function solve()
        {
            echo "不能起床,解决一下";
        }
    }
    class gotowex extends Exception
    {

        public function solve()
        {
            echo "不知道怎么坐车,解决一下";
        }
    }
    class workex extends Exception
    {

        public function solve()
        {
            echo "没到公司,解决一下";
        }
    }

    /************************************************/

    class myday
    {
        public function getup($f=1)
        {
            if($f)
            {
                echo "正常起床<br>";
            }
            else
            {
                throw new getupex("没能正常起床", 1);

            }
        }
        public function gotowork($f=1)
        {
            if($f==1)
            {
                echo "步行去上班<br>";
            }
            elseif ($f==2) 
            {
                echo "坐地铁去上班<br>";
            }
            elseif ($f==3) 
            {
                echo "做出租去上班<br>";
            }
            else
            {
                throw new gotowex("不知道怎么去上班", 1);
            }
        }
        public function work($f=1)
        {
            if($f)
            {
                echo "到达公司,开始工作<br>";
            }
            else
            {
                throw new workex("没到达公司", 1);
            }
        }
    };
    $p=new myday();
    try
    {
        $p->getup();
        $p->gotowork();
        $p->work();
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
        echo $e->solve();
    }
?>

     那样一来就万分好了

  如若赶上越发离谱的充裕,比如调用函数时不按规定传入了七个参数呢。对于那么些实在已经完成了不当的级别了。这时PHP会向页面或日志输出错误报告。

  可是多少那种不当是大家能够拍卖的了,大家期望爆发那种错误时一并付诸错误处理函数来拍卖。那应该怎么办吧,该怎么在适度的时候抛出相当呢

1     set_error_handler('error_hand');
2     function error_hand($level,$message,$file,$line)
3     {
4         if($line==82) throw new getupex("没能正常起床", 1);
5         elseif ($line==83) throw new gotowex("不知道怎么去上班", 1);
6         elseif ($line==84) throw new workex("没到达公司", 1);
7     }

   那里运用了错误处理函数,那样一来就足以在发出错误时,自动抛出尤其交给非凡处理函数去处理了,当中$line用来判定错误发生的行数。

相关文章