Запятые быстрее.
Конструкция echo
допускает несколько «параметров». Когда вы echo
запятые, вывод отправляется прямо в буфер по частям. Когда вы используете .
, он должен сначала объединиться.
Для большинства приложений это не сильно повлияет на скорость, но в любом случае я обычно использую запятую для echo
.
Вот вам эталон, если вам интересно:
http://www.electrictoolbox.com/php-echo-commas-vs-concatenation/
РЕДАКТИРОВАТЬ: Теперь вот почему вещи "вышли из строя". (Приношу извинения всем, поскольку я только сейчас понял, что это был корневой вопрос все время.) Когда вы echo
с .
, вы сначала объединяетесь, прежде чем echo
выполнит свою работу. Для этого каждое выражение должно оцениваться в первую очередь. Учтите это:
echo (5+5) . (10+10);
PHP сначала оценит (5+5)
, а затем (10+10)
. Это эквивалентно превращению этого в это:
echo 10 . 20;
И затем их нужно объединить, чтобы они преобразовались в строки и стали такими:
echo "1020";
Это имеет смысл? Теперь рассмотрим функцию previous_post_link()
. @Tim совершенно прав, что у этой функции нет возвращаемого значения. Когда эта функция вычисляется, она ничего не возвращает и что-то выводит. Итак, если мы сделаем это:
echo "test" . previous_post_link();
Сначала оцениваются обе вещи. "test"
уже является строкой, но нам нужно сначала запустить функцию previous_post_link()
, чтобы получить возвращаемое значение для конкатенации. При запуске previous_post_link()
что-то выводит и ничего не возвращает. "test"
затем объединяется с ничем, и эта конкатенация выводится через echo
.
Теперь предположим, что вместо этого мы используем запятые:
echo "test", previous_post_link();
PHP оценивает все «параметры» для конструкции echo
по порядку и выводит их. Сначала выводится "test"
, а затем вычисляется previous_post_link()
, который имеет собственный вывод и ничего не возвращает, поэтому для него ничего не выводится.
Надеюсь, это понятнее. Опубликуйте, если нет.