PHP 这种特殊传参写法叫什么名字

图片描述

如图,一根斜杠和一个Exception。另外Exception这个是干什么的

阅读 5.8k
9 个回答

我不知道你有没有学过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类型';
}

后续还有更多可以深入聊的,我就不继续说了。

反斜杠是 命名空间 相关的写法,对参数进行了类型约束。

限制了接收参数的数据类型,用的是Exception数据类型,反斜杠是命名空间的写法, Exception是你框架里的类

“/” 是命名空间 指根下的
“Exception” 指参数类型约束 (只能使用Exception的实例来传参)
“$e" 参数 Exception 的实例

限制入参类型。
7.x以下支持传对象和数组

  1. \是PHP命名空格的分隔符,\表示根命名空间
  2. \Exception是类型声明
新手上路,请多包涵

表示的是namespace
Exception $e 表示接受的参数 $e instanceof Exception 为真就可以

推荐问题
宣传栏