при использовании 'echo' в функции, почему результат отображается в предыдущей строке - PullRequest
0 голосов
/ 12 декабря 2010

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

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

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

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

Ответы [ 5 ]

2 голосов
/ 12 декабря 2010

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

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

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

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

В вашем исходном примере порядок выполнения таков:

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

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

1 голос
/ 12 декабря 2010

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

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

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

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

1 голос
/ 12 декабря 2010

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

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

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

...