空合并运算符是否调用一个函数两次?

Does null coalescing operator call a function twice?

空合并运算符 (??) returns 它的第一个操作数(如果它存在且不为 NULL),否则 returns 它的第二个操作数。

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

举个例子,假设函数 get_name() returns 一个字符串值或 null。

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

所以 get_name() 被调用一次并且存储的值准备好将其分配给变量 ($name) 或者当 ?? 由于函数返回一个值而被激活时对于 isset() 是正确的,?? 是否会第二次调用第一个操作数以获取值?

只调用了一次

如果您在函数中添加副作用,例如打印,这很容易看出,例如:

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

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

Demo