在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
閱讀更多 碎片化學習前後端編程 的文章