Нулевой оператор объединения (??
) возвращает свой первый операнд, если он существует и не равен NULL, а в противном случае возвращает свой второй операнд.
Если первый операнд является вызовом функции или метода, вызывает ли оператор вызов функции дважды?
В качестве примера скажем функцию get_name()
возвращает строковое значение или ноль.
$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);
?>
Других решений пока нет …