空合并运算符是否调用一个函数两次?
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);
?>
空合并运算符 (??
) 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);
?>