try catch自定义异常类的使用

时间:2022-08-30 20:22:30
 1 <?php
 2 //定义一个学生类
 3 class Student{
 4      //学生的名字
 5      private $name;
 6      //学生的年龄
 7      private $age;
 8 
 9   public function __construct($name,$age){
10 
11        $this->setName($name);
12        $this->setAge($age);
13   }
14   public function setName($name){
15         $this->name=$name;
16   }
17   public function setAge($age){
18         if(is_int($age)&&$age>18&&$age<25){
19          $this->age=$age;
20         }else{ 
21          //抛出一个异常并记录是哪个学生出错             
22          throw new StudentException($this,$this->name.'年龄出错',333);
23         }
24     }
25 
26 }
27 //自定义一个学生异常类,
28 //到时候清楚是哪个学生发生异常
29 class StudentException extends Exception{
30  
31     protected $student;
32 
33  //我们需要重写父类的构造方法
34  public function __construct($stu,$message,$code){
35 //记录下学生信息
36     $this->student=$stu;
37 
38   //上面的容易理解
39 //  $this->message=$message;
40 //  $this->code=$code;
41 
42 //问题有些疑惑关于这里
43 //我是这样理解代码的:重写父类的构造方法并没有得到父类值,这时候我们需要初始化父类的构造方法
44    parent::__construct($message,$code);
45  }
46  public function getStudent(){
47        
48        return $this->student;
49 
50      }
51 }
52 //监视所有的学生,如果有学生信息错误就返回相应信息
53 try{
54       $student1=new Student('aaa',21);
55       $student2=new Student('bbb',23);
56       $student3=new Student('ccc',19);
57       $student4=new Student('ddd',28);
58 
59 }
60 catch(StudentException $e){
61       echo "<pre>";
62       //获取发生错误学生的全部信息
63       var_dump($e->getStudent());
64       echo "发生的错误消息:".$e->getMessage();
65 }
66 ?>