null合并运算符是否会调用两次函数?

Jam*_*mes 2 php null-coalescing-operator php-7

null合并运算符(??)返回其第一个操作数(如果它存在且不为NULL),否则返回其第二个操作数.

如果第一个操作数是函数或方法调用,操作符是否会调用函数调用两次?

例如,假设该函数get_name()返回一个字符串值或null.

$name = get_name() ?? 'no name found';

因此,被get_name()调用一次,值存储准备把它赋值给变量($name),或者当??被激活引起的函数返回一个值,是真正的isset(),并??在第一个操作数调用第二次获得的价值?

Mur*_*nik 5

它只被叫一次.

如果您为功能添加副作用(例如打印),则很容易看到:

<?php
function get_name() {
    print("get_name() was called\n");
    return "somestring";
}

$name = get_name() ?? 'no name found';
print($name);
?>
Run Code Online (Sandbox Code Playgroud)

演示

  • 不错的测试!一旦你看到有人提出建议,那也很简单.谢谢 (2认同)
  • 您可以使用`__FUNCTION__`或`__METHOD__`常量来获取当前函数的名称.方法将显示类`class :: method`.:)例如`print __FUNCTION __."()被称为\n";` (2认同)