при использовании функции «эхо» в функции, почему результат появляется в предыдущей строке?

Я написал функцию, которая повторяла идентификатор с другой стороны связанной таблицы.

когда я пишу на странице, вызывающей функцию –

echo "<br/>getalbumartistfunction: ".get_albumartistid($thisalbum); 

он возвращает номер artist_id в строке выше, где у меня есть этот вызов функции. Поэтому я вошел в функцию и переключил ее с «эхо» на «возвращение», и теперь она появляется сразу после двоеточий, как я ожидал бы (и, вероятно, больше в соответствии с тем, что мне нужно).

Так оно и работает. Но я очень смущен, почему он показывает результат в предыдущей строке, когда функция настроена на эхо-сигнал.

Solutions Collecting From Web of "при использовании функции «эхо» в функции, почему результат появляется в предыдущей строке?"

Эхо в get_albumartistid выполняется сразу же после вызова функции, в то время как эхо-сигнал "
… "собирает строку перед ее эхом – по существу буферизует всю вещь, прежде чем она эхо. Возвращение вместо эха – это правильный способ справиться с этим, поскольку это эффективно заменит вызов функции возвращаемой строкой. Если вы должны использовать эхо вам придется:

 echo "<br/>getalbumartistfunction: "; get_albumartistid($thisalbum); 

Что эффективно становится:

 echo "<br/>getalbumartistfunction: "; echo "<The artist id>"; 

В вашем первоначальном примере, что порядок выполнения делает это:

 echo "<The artist id>"; echo "<br/>getalbumartistfunction: "; 

Поскольку все эхо-сигналы происходят сразу же после его вызова, а PHP не выполняется, буферизация внешнего выражения эха.

Поскольку аргумент для echo должен быть известен до get_albumartistid echo , функция get_albumartistid вызывается раньше. Таким образом, любое выражение внутри функции также вызывается перед echo . Вот почему echo внутри функции выводит данные перед echo вне функции.

Поскольку функция get_albumartistid оценивается до вывода всего эха, то есть эхо внутри get_albumartistid выполняется перед echo "<br/>getalbumartistfunction: " .

echo отправляет контент непосредственно в выходной буфер. Когда у вас есть функция echo в функции, это происходит:

  1. PHP встречает внешнее выражение echo . Он начинает строить строку для отправки в выходной буфер. Первое, что он видит, это строка "<br/>getalbumartistfunction: " . Следующее, связанное с предыдущей строкой, является вызовом функции get_albumartistid() . Он должен оценить этот вызов функции, чтобы завершить оценку конкатенации, поэтому …
  2. PHP выполняет функцию get_albumartistid() . Эта функция содержит инструкцию echo . Содержимое echo инструкции отправляется в выходной буфер. Функция возвращает значение null .
  3. Функция вернула значение null , поэтому PHP объединяет null в предыдущую строку (оставив ее неизменной).
  4. Строка во внешнем echo теперь закончена, и echo готово к возврату. Он отправляет строку в выходной буфер.

Выражение и порядок выполнения.

Ваша echo "string" . get() echo "string" . get() приводит к следующему потоку выполнения:

  • PHP объединяет выражение, следующее за эхом. Эхо не может быть выполнено.
  • Первая строка в конкатенации статична.
  • Чтобы получить вторую строку, нужно вызвать функцию. Когда функция делает что-нибудь смешное (делайте шумы перда или печатайте что-то), он делает это прямо сейчас.
  • Две строковые части объединены в новую временную строку.
  • Только теперь можно эхо выводить все.