Нулевой оператор слияния вызывает функцию дважды?

Нулевой оператор объединения (??) возвращает свой первый операнд, если он существует и не равен NULL, а в противном случае возвращает свой второй операнд.

Если первый операнд является вызовом функции или метода, вызывает ли оператор вызов функции дважды?

В качестве примера скажем функцию get_name() возвращает строковое значение или ноль.

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

Так и есть get_name() вызывается один раз, и значение сохраняется готовым присвоить его переменной ($name) или когда ?? активируется из-за функции, возвращающей значение, истинное для isset()делает ?? вызвать первый операнд во второй раз, чтобы получить значение?

2

Решение

Это называется только один раз.

Это довольно легко увидеть, если вы добавите побочный эффект к вашей функции, такой как печать, например:

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

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

демонстрация

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]