我不知道你有没有学过C语言,如果学过C语言的话,我们知道定义一个函数,如下: void hello(int a) {} 他的意思是定义了函数hello,hello函数里传的参数a必须要传整型的。就C语言来说,数据类型基本上就是系统定义的那么些整型啊,浮点型啊,字符串啊等等。 那么来看PHP这个东西: public function render(\Exception $e) {} 此处表示render这个方法传递的参数必须是 \Exception类型的,参数名是$e,官方叫法是类型约束,也就是约束这个$e必须为 \Exception; 那么来看这个 \Exception,在PHP面向对象程序中,\这个符号指的是PHP命名空间的根目录,一般来说这个符号代表了PHP系统本身定义的命名空间,调用的是系统本身下的类,那么此处 \Exception就是指的是PHP语言中内置的Exception类。 Exception是PHP本身的异常类,用来产生程序异常,并用throw抛出,通常用 try {...} catch {...} finally {...}这种语法结构来获取到Exception抛出的信息。 举个栗子?: try { $a = 111; if($a != 000) { throw new \Exception('$a不等于000'); //抛出异常 } } catch(\Exception $e) { echo $e->getMessage(); // 获取到抛出的异常信息并输出 } 另外一个例子: $e = new \Exception('这里我抛出异常了哦'); 此时产生的 $e 变量就是由 new 了一个 \Exception类得来的,此时的$e的类型是\Exception; 那么此时假设我们调用你上面的 render 方法,首先假设render封装到一个X类中: class X { public function render(\Exception $e) {} } 那么我们: $e = new \Exception('这里我抛出异常了哦'); $x = new X(); $x->render($e); 这段程序执行就是正确的,如果说: $e = 'this is string'; $x = new X(); $x->render($e); 此时的$e是string类型,PHP会报错。 所以,你可以在调用render()的时候对类型进行验证: if($e instanceof \Exception) { $x->render($e); } else { echo '$e不是\Exception类型'; } 后续还有更多可以深入聊的,我就不继续说了。
我不知道你有没有学过C语言,如果学过C语言的话,我们知道定义一个函数,如下:
他的意思是定义了函数hello,hello函数里传的参数a必须要传整型的。就C语言来说,数据类型基本上就是系统定义的那么些整型啊,浮点型啊,字符串啊等等。
那么来看PHP这个东西:
此处表示render这个方法传递的参数必须是
\Exception
类型的,参数名是$e,官方叫法是类型约束,也就是约束这个$e必须为\Exception
;那么来看这个
\Exception
,在PHP面向对象程序中,\
这个符号指的是PHP命名空间的根目录,一般来说这个符号代表了PHP系统本身定义的命名空间,调用的是系统本身下的类,那么此处\Exception
就是指的是PHP语言中内置的Exception类。Exception
是PHP本身的异常类,用来产生程序异常,并用throw
抛出,通常用try {...} catch {...} finally {...}
这种语法结构来获取到Exception抛出的信息。
举个栗子?:
另外一个例子:
此时产生的
$e
变量就是由 new 了一个\Exception
类得来的,此时的$e的类型是\Exception
;那么此时假设我们调用你上面的
render
方法,首先假设render封装到一个X类中:那么我们:
这段程序执行就是正确的,如果说:
此时的$e是string类型,PHP会报错。
所以,你可以在调用
render()
的时候对类型进行验证:后续还有更多可以深入聊的,我就不继续说了。