Я написал функцию, которая повторяла идентификатор с другой стороны связанной таблицы.
когда я пишу на странице, вызывающей функцию –
echo "<br/>getalbumartistfunction: ".get_albumartistid($thisalbum);
он возвращает номер artist_id в строке выше, где у меня есть этот вызов функции. Поэтому я вошел в функцию и переключил ее с «эхо» на «возвращение», и теперь она появляется сразу после двоеточий, как я ожидал бы (и, вероятно, больше в соответствии с тем, что мне нужно).
Так оно и работает. Но я очень смущен, почему он показывает результат в предыдущей строке, когда функция настроена на эхо-сигнал.
Эхо в 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
в функции, это происходит:
echo
. Он начинает строить строку для отправки в выходной буфер. Первое, что он видит, это строка "<br/>getalbumartistfunction: "
. Следующее, связанное с предыдущей строкой, является вызовом функции get_albumartistid()
. Он должен оценить этот вызов функции, чтобы завершить оценку конкатенации, поэтому … get_albumartistid()
. Эта функция содержит инструкцию echo
. Содержимое echo
инструкции отправляется в выходной буфер. Функция возвращает значение null
. null
, поэтому PHP объединяет null
в предыдущую строку (оставив ее неизменной). echo
теперь закончена, и echo
готово к возврату. Он отправляет строку в выходной буфер. Выражение и порядок выполнения.
Ваша echo "string" . get()
echo "string" . get()
приводит к следующему потоку выполнения: