php空合并运算符,三元运算符,PHP高级

什么是空合并运算符

提出问题

下面的php代码,来自于laravel框架,请问这里的 ?是什么意思

$request->user()?->tokenCan('*')

解释

在这段 PHP 代码中,? 是一个 空合并运算符。它用于将两个表达式组合在一起,并返回第一个表达式的值,如果它不是 null 或 false,则返回第二个表达式的值。

$request->user()?->tokenCan('*') 中,$request->user() 可能返回 null 或 false,如果用户未经身份验证。在这种情况下,? 运算符将阻止对 tokenCan() 方法的调用,并避免出现错误。

如果 $request->user() 返回非 null 或 false 的值,则 ? 运算符将返回 tokenCan('*') 的值。

以下是这段代码的示例:

$request = new Request();

// 用户未经身份验证
$request->setUser(null);

$result = $request->user()?->tokenCan('*');

// $result 将为 false

// 用户已经过身份验证
$request->setUser(new User());

$result = $request->user()?->tokenCan('*');

// $result 将为 true 或 false,取决于用户的权限

总结

在 PHP 中,? 运算符用于将两个表达式组合在一起,并返回第一个表达式的值,如果它不是 null 或 false,则返回第二个表达式的值。

在 Laravel 框架中,? 运算符通常用于检查用户是否已经过身份验证,并在未经身份验证的情况下避免出现错误。

空合并运算符的不同形式

空合并运算符不是两个?吗,像这样 a??b而这里只有一个?有什么区别吗

您说得没错,空合并运算符通常是两个 ?,例如 a ?? b。在这种情况下,它将返回第一个操作数的值,如果它不是 null 或 false,则返回第二个操作数的值。

$request->user()?->tokenCan('*') 中,只有一个 ? 是因为 -> 运算符的优先级高于 ? 运算符。因此,$request->user()?->tokenCan('*') 将被解析为 ($request->user())?->tokenCan('*')

在这种情况下,? 运算符仅用于检查 $request->user() 的返回值是否为 null 或 false。如果为 null 或 false,则不会调用 tokenCan() 方法。

以下是两种写法的区别:

// 两个 ?

$result = $request->user() ?? $request->tokenCan('*');

// 如果 $request->user() 为 null 或 false,则返回 $request->tokenCan('*') 的值。

// 一个 ?

$result = $request->user()?->tokenCan('*');

// 如果 $request->user() 为 null 或 false,则不会调用 $request->tokenCan('*')。

总结:

  • 两个 ? 用于将两个表达式组合在一起,并返回第一个表达式的值,如果它不是 null 或 false,则返回第二个表达式的值。
  • 一个 ? 用于检查第一个表达式的返回值是否为 null 或 false。如果为 null 或 false,则不会调用第二个表达式。

在大多数情况下,使用两个 **?** 更加清晰易懂。但是,在某些情况下,使用一个 **?** 可以提高代码的效率。

相关推荐

  1. php合并运算符三元运算符PHP高级

    2024-04-26 06:38:01       17 阅读
  2. PHP运算符:从基础到高级

    2024-04-26 06:38:01       9 阅读
  3. PHP基础 - 运算符

    2024-04-26 06:38:01       27 阅读
  4. PHP运算符汇总

    2024-04-26 06:38:01       31 阅读
  5. php中常见的运算符和使用方法

    2024-04-26 06:38:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 06:38:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 06:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 06:38:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 06:38:01       20 阅读

热门阅读

  1. 使用git将本地项目上传到github

    2024-04-26 06:38:01       11 阅读
  2. Docker搭建Codiad

    2024-04-26 06:38:01       11 阅读
  3. flutter开发实战-混淆minifyEnabled及shrinkResources

    2024-04-26 06:38:01       10 阅读
  4. 安卓手机APP开发__媒体开发部分__调试的日志

    2024-04-26 06:38:01       15 阅读
  5. 2014NOIP普及组真题 1. 珠心算测验

    2024-04-26 06:38:01       15 阅读
  6. 定时任务管理系统详细设计说明书

    2024-04-26 06:38:01       11 阅读
  7. git commit 提交信息规范

    2024-04-26 06:38:01       15 阅读
  8. jmeter分布式压力测试搭建

    2024-04-26 06:38:01       14 阅读
  9. Ajax&Axios

    2024-04-26 06:38:01       14 阅读
  10. 计算机视觉(CV)技术的优势和挑战

    2024-04-26 06:38:01       14 阅读
  11. vue:使用:element 中弹框中获取table高度无效

    2024-04-26 06:38:01       10 阅读