ThinkPHP6 throw

在ThinkPHP6中将带来两个新的助手函数:throw_if 和 throw_unless,两者的目的都是为了简化抛出异常。

“就像其他助手函数,throw_if 和 throw_unless 可以帮助我们快速开发简洁易懂的代码”。TJ Miller 说,“尤其是这两者可以把条件块代码简化为一行,非常的赞”。


我们来看一下这两个助手函数,并演示一下如何使用它们:

throw_if

Throw if,就像它的名字一样,如果第一个参数为真(true),那么将会抛出一个异常。

示例1:

<code>$condition = true;throw_if($condition, \\think\\Exception::class, '条件为真');// 或throw_if($condition, new \\think\\Exception('条件为真'));/<code>

throw_if助手函数参考:

<code>/*** 按条件抛异常*     * @param mixed            $condition     * @param Throwable|string $exception     * @param array            ...$parameters     * @return mixed     *     * @throws Throwable*/function throw_if($condition, $exception, ...$parameters){  if ($condition) {    throw (is_string($exception) ? new $exception(...$parameters) : $exception);  }  return $condition;}/<code>

throw_unless

与 throw_if 相反的是 throw_unless,如果第一个参数为假(false),则抛出异常:

示例2:

<code>$condition = false;throw_unless($condition, \\think\\Exception::class, '条件为假');// 或throw_unless($condition, new \\think\\Exception('条件为假'));/<code>

throw_unless助手函数参考:

<code>/**     * 按条件抛异常     *     * @param mixed            $condition     * @param Throwable|string $exception     * @param array            ...$parameters     * @return mixed     * @throws Throwable     */function throw_unless($condition, $exception, ...$parameters) {  if (!$condition) {    throw (is_string($exception) ? new $exception(...$parameters) : $exception);  }  return $condition;}/<code> 



扩展知识点:

在throw_if和throw_unless助手函数实现中,在第三个参数中使用了...$parameters,这是PHP 5.6+版本中新添加的一种语法糖功能。

即可以通过使用 ... 运算符,将函数参数存储在紧接的可遍历的变量中。

<code>// 通过使用 ... 运算符,将函数参数存储在紧接的可遍历的变量中function sum(...$numbers) {    $sum = 0;    foreach ($numbers as $num) {        $sum += $num;    }    return $sum;}// 输出 10echo sum(1, 2, 3, 4);/<code>

又可以通过使用 ... 运算符,将数组或可遍历对象展开为函数参数。


<code>function add($a, $b, $c) {    return $a + $b + $c;}$num=[2, 3, 4];// 输出 6echo add(1, ...$num); // 第二个和第三个参数将会从$num中循环赋值($b为2,$c为3),$num数组中最后一个值 4 将被忽略掉。/<code>

参考手册:https://www.php.net/manual/zh/functions.arguments.php#functions.variable-arg-list


分享到:


相關文章: