Конструкции 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 и почему в разных ситуациях выигрыш в скоростях различный, стоит написать подробнее.
В самом простом варианте
echo будет работать быстрее только за счет того, что не тратится время на возвращение значения (print-y всегда приходится возвращать '1'). Однако если нам необходимо вывести несколько строк, то здесь уже выигрыш будет более значительный, т. к. в случае с echo достаточно только перечислить через запятую аргументы:
А при использовании print либо несколько раз вызывать функцию вывода:
Либо выполнять операцию конкатенации строк, чтобы получить один аргумент:
И в том и в другом случае - потери времени. Пусть и незначительные, но все-таки потери, которых при использовании echo просто нет.
Что популярней, print или echo?
Просмотрел пять лежащих под рукой учебников по php - везде используется для вывода исключительно echo.
Однако не лишним будет проверить соотношение популярности print и echo с помощью "Пульса Блогосферы" Яндекса:
и Google Trends:
Стоит признать, что графики мало отражают действительную картину (соотношение популярности использования print или echo для вывода), т. к. слово "print" может использоваться во многих контекстах (адресах, комментариях), в отличии от "echo".
Но все-таки картина достаточно ясна - "echo" однозначно популярней. Чтобы подтвердить этот факт, возьмем три популярных CMS, распространяемых по лицензии GNU GPL, и посмотрим, какая конструкция вывода в них преобладает.
Что и требовалось доказать - 2/3 используют echo. В случае с Drupal, использование print обусловлено скорее всего привычкой и нежеланием отходить от ранее принятых стандартов оформления кода, нежели какими-то весомыми аргументами. Хотя явного указания, что использовать надо именно print, я в официальной документации (стандарты оформления кода) не нашел. В обсуждениях, почему используется именно print, а не echo, все сходятся во мнении - It's simply a coding habit. Просто привычка и ничего более.
Что использовать?
Однозначного ответа дать нельзя. Но при прочих равных - echo явно выигрывает. Даже скорость набора выше, всего четыре удобно расположенных на клавиатуре буквы.
Единственной же реальной причиной использования print я вижу только написание кода под проект, где исторически используется именно "print", а не "echo", чтобы не выбиваться из стиля. Хотя признаюсь - программируя под тот же Drupal, я частенько использую все-таки "echo", т. к. мне так просто привычней.
Комментарии
Спасибо автору