侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
WEB

三元运算符和空合并运算符

Administrator
2025-02-26 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

在PHP中,?? 是空合并运算符(Null Coalescing Operator),用于简化判断变量是否存在或是否为null的逻辑。如果你需要根据两种不同的条件返回不同的结果,可以使用三元运算符(? :)来实现。


场景分析:

假设你需要根据$find['unit']的值返回两种不同的结果:

  1. 如果$find['unit']存在且不为空,返回$find['unit']

  2. 如果$find['unit']不存在或为空,返回一个默认值(例如空字符串'')。


使用三元运算符:

三元运算符的语法是:

php

复制

条件 ? 结果1 : 结果2

你可以这样写:

php

复制

$find['unit'] ? $find['unit'] : ''
  • 如果$find['unit']存在且不为空,返回$find['unit']

  • 否则,返回空字符串''


使用空合并运算符:

空合并运算符??的语法是:

php

复制

$变量 ?? 默认值

你可以这样写:

php

复制

$find['unit'] ?? ''
  • 如果$find['unit']存在且不为null,返回$find['unit']

  • 否则,返回空字符串''


两种写法的区别:

  1. 三元运算符

    • 会检查$find['unit']是否为“真值”(即非空、非零、非false)。

    • 例如,如果$find['unit']0false,三元运算符会返回默认值''

  2. 空合并运算符

    • 只检查$find['unit']是否存在或是否为null

    • 如果$find['unit']0false,空合并运算符会返回0false,而不是默认值。


示例代码:

假设$find['unit']的值可能是null、空字符串、0false或其他值。

1. 使用三元运算符:

php

复制

$value = $find['unit'] ? $find['unit'] : '';
  • 如果$find['unit']null、空字符串、0false,返回''

  • 否则,返回$find['unit']

2. 使用空合并运算符:

php

复制

$value = $find['unit'] ?? '';
  • 如果$find['unit']null或不存在,返回''

  • 否则,返回$find['unit'](包括0false)。


根据需求选择:

  • 如果你希望0false也被视为有效值,使用空合并运算符??)。

  • 如果你希望0false被视为无效值,使用三元运算符? :)。


在你的代码中的应用:

如果你的<select>标签需要动态设置默认选中值,可以这样写:

使用三元运算符:

html

复制

<select id="unit" name="unit" lay-filter="unit" lay-search>
    <option value="">请选择</option>
    <option value="1" {$find['unit'] == '1' ? 'selected' : ''}>选项1</option>
    <option value="2" {$find['unit'] == '2' ? 'selected' : ''}>选项2</option>
</select>

运行 HTML

使用空合并运算符:

html

复制

<select id="unit" name="unit" lay-filter="unit" lay-search>
    <option value="">请选择</option>
    <option value="1" {($find['unit'] ?? '') == '1' ? 'selected' : ''}>选项1</option>
    <option value="2" {($find['unit'] ?? '') == '2' ? 'selected' : ''}>选项2</option>
</select>

运行 HTML


总结:

  • 如果你需要更严格的判断(包括0false),使用三元运算符

  • 如果你只需要检查变量是否存在或是否为null,使用空合并运算符

0

评论区