О сайтах и не о сайтах

Теперь и в tg!

tg

Переехал с твиттера на t.me/tulvit_blog, если что.

Различия echo и print. Что использовать?

Конструкции echo и print выполняют одинаковую функцию - вывод строковой информации. В исходниках и книгах можно встретить как повсеместное использование print-а, так и echo. В чем же их отличие и чему лучше отдать предпочтение?

Обратимся к документации.

int print ( string $arg )
print() is not actually a real function (it is a language construct) so you are not required to use parentheses with its argument list. void echo ( string $arg1 [, string $... ] )
echo() is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo() (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function. Additionally, if you want to pass more than one parameter to echo(), the parameters must not be enclosed within parentheses.

Функции или нет?

И print и echo - это не функции как таковые, а языковые конструкции. Поэтому аргументы заключать в скобки не обязательно.

Однако работа print-a аналогична работе функций, а работа echo - нет. Таким образом, print, в отличии от echo, можно использовать в контексте использования функций. Например, в тернарном операторе:
Использование в вышеприведенном примере вместо "print" конструкции "echo" приведет к ошибке, хотя никто не запрещает использоваться такую запись:

Переписанный вариант для echo призван проиллюстрировать, что трудно найти ситуацию, где использование print-a было бы единственным возможным вариантом.

Возвращаемые значения.

Различаются print и echo и по возвращаемым значениям. Print возвращает единицу, причем всегда и именно единицу (int=1), а не булево true. Echo же не возвращает вообще ничего (не путать с return NULL;).

Аргументы.

Print может принимать только один аргумент, а echo - произвольное количество (при передачи более чем одного аргумента, разделенных запятыми, заключать аргументы в скобки запрещается).

Скорость.

Различие в скорости echo и print - минимально, и им можно пренебречь, особенно в силу последних тенденций к построению архитектуры программного обеспечения (MVC), где на странице часто присутствует или всего один вывод, или их ограниченное количество (по одному на каждый логический блок), реже больше.

Сравнение скоростей echo и print по результатам тестов на сайте phpbench.com:
сравнение скорости работы print и echo

Хотя о том, почему print работает медленнее echo и почему в разных ситуациях выигрыш в скоростях различный, стоит написать подробнее.

В самом простом варианте

echo будет работать быстрее только за счет того, что не тратится время на возвращение значения (print-y всегда приходится возвращать '1'). Однако если нам необходимо вывести несколько строк, то здесь уже выигрыш будет более значительный, т. к. в случае с echo достаточно только перечислить через запятую аргументы:
А при использовании print либо несколько раз вызывать функцию вывода:
Либо выполнять операцию конкатенации строк, чтобы получить один аргумент:

И в том и в другом случае - потери времени. Пусть и незначительные, но все-таки потери, которых при использовании echo просто нет.

Что популярней, print или echo?

Просмотрел пять лежащих под рукой учебников по php - везде используется для вывода исключительно echo.

Однако не лишним будет проверить соотношение популярности print и echo с помощью "Пульса Блогосферы" Яндекса:
упоминания в блогосфере конструкций print и echo по материалам сервиса Яндекса "Пульс Блогосферы"

и Google Trends:
Гугл Тренды: популярность использования print и echo.

Стоит признать, что графики мало отражают действительную картину (соотношение популярности использования print или echo для вывода), т. к. слово "print" может использоваться во многих контекстах (адресах, комментариях), в отличии от "echo".

Но все-таки картина достаточно ясна - "echo" однозначно популярней. Чтобы подтвердить этот факт, возьмем три популярных CMS, распространяемых по лицензии GNU GPL, и посмотрим, какая конструкция вывода в них преобладает.
Использование print или echo в популярных CMS Drupal, Joomla, WP.

Что и требовалось доказать - 2/3 используют echo. В случае с Drupal, использование print обусловлено скорее всего привычкой и нежеланием отходить от ранее принятых стандартов оформления кода, нежели какими-то весомыми аргументами. Хотя явного указания, что использовать надо именно print, я в официальной документации (стандарты оформления кода) не нашел. В обсуждениях, почему используется именно print, а не echo, все сходятся во мнении - It's simply a coding habit. Просто привычка и ничего более.

Что использовать?

Однозначного ответа дать нельзя. Но при прочих равных - echo явно выигрывает. Даже скорость набора выше, всего четыре удобно расположенных на клавиатуре буквы.

Единственной же реальной причиной использования print я вижу только написание кода под проект, где исторически используется именно "print", а не "echo", чтобы не выбиваться из стиля. Хотя признаюсь - программируя под тот же Drupal, я частенько использую все-таки "echo", т. к. мне так просто привычней.

Комментарии

Спасибо автору