【问题标题】:PHP if null or false return empty array by default?PHP如果null或false默认返回空数组?
【发布时间】:2019-07-17 15:31:59
【问题描述】:

为什么这行代码在 php 中不像在 JS 中那样工作:

$id = [];

$id = null || [];

if (count($id)) {
  echo 'd';
}

为什么$id 仍然是空数组[]?因此count() 会报错。

【问题讨论】:

  • 因为 PHP 和 JS 是完全不同的语言,基于完全不同的编码模型。
  • 所以用php写成简写形式??
  • 我想你的意思是$id = null ?? [];
  • ??是什么意思?
  • 请注意 $id 分配给 false 而不是 null。另见:stackoverflow.com/questions/15327508/why-countfalse-return-1

标签: php


【解决方案1】:

在 PHP 中,logical operators|| 一样总是返回一个布尔值,即使给出的是非布尔值输出。

因此,您的陈述被评估为“null[] 是真的吗?”由于null 和空数组的计算结果都为false,因此结果为布尔值false

但是有两个运算符可以做类似于 JS 的 ||:

  • $a ?: $b$a ? $a : $b 的简写;换句话说,如果它是“真实的”,则评估为 $a,否则评估为 $b(这与 the ternary operator 一起记录,它是简写)
  • $a ?? $b 类似,但检查 null 而不是“真实性”;相当于isset($a) ? $a : $b(这称为null-coalescing operator

【讨论】:

    【解决方案2】:
    <?php
    
    // PHP < 7
    $id = isset($id) ? $id : [];
    
    // PHP >= 7
    $id = $id ?? [];
    

    PHP 7 及以上版本
    Null Coalesce Operator
    Another helpful link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-12
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多