Вызывает ли оператор объединения null функцию дважды?

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

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

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

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

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


person James    schedule 30.09.2018    source источник


Ответы (1)


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

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

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

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

Демо

person Mureinik    schedule 30.09.2018
comment
Хороший тест! просто действительно слишком, как только вы видите, что кто-то предлагает это. Спасибо - person James; 30.09.2018
comment
Вы можете использовать константы __FUNCTION__ или __METHOD__, чтобы получить имя текущей функции. Метод отобразит класс class::method. :) Например print __FUNCTION__."() was called\n"; - person ArtisticPhoenix; 01.10.2018