Вызовы функции в PHP

Чем отличается вызов через echo:

 function a () {
 	echo "4";
 }
echo a();

От вызова функции непосредственно:

 function a () {
 	echo "4";
 }
 a();
fgh's picture

Оба варианта выводят цифру.

vedro-compota's picture

Оба варианта выводят цифру.

вывод не отличается, так как обе функции возвращают, судя по всему, null, который при выводится как "пустая сторка" (в первом случае). При этом обе они печатают 4-ку идентичным образом.

_____________
матфак вгу и остальная классика =)

melisa's picture

Формулировка "вызов через echo" не совсем корректная, и она запутывает. Вызов функции в любом происходит сам по себе при обращении к функции. А вот, что потом будет с результатом, определяется кодом снаружи. Т.е.:

  1. function a () {
        echo "4";
    }
    echo a();

    Здесь второй вызов echo() печатает результат выполнения функции a

  2. function a () {
       echo "4";
    }
    a();

    А здесь просто вызывается. Но т.к. сама функция печатает значение, то разницы на экране Вы не заметите

Фактически результат в данном случае будет одинаковый, но первый вариант кода избыточный.

На практике обычно требуется, чтобы функция именно возвращала значение (для этого используйте return). Это плохая практика, когда функция имеет побочный эффект. А если Вам нужно вывести значение на экран, это лучше сделать в коде "снаружи":

function a () {
    return "4";
}
echo a();

или поручить другой функции, которая только печатает данные:

function a () {
    return "4";
}

function printValue ($value) {
   echo $value;
}

printValue(a());
fgh's picture

Можно вынести ясность, что такое,
1) "Колбеки", на примере (функции обратного вызова)
2) что такое "Точка возрата функции" или как то так? Или после выполнения return выполняется следующая часть кода под функцией?
3) Куда в какую "ячейку памяти" или записывается значение возвращаемое функцией с помощью слова "return"?
4) Использование вложенных функций это пример избыточности?

$c = 'w';
 function a ($c) { echo strtoupper($c); }
a($c);

Так как функция, strtoupper($c) сама по себе может изменить регистр