Должен ли я использовать echo или печатать в php-скриптах?


Какой оператор я должен использовать в php-скриптах? Эхо или печать? Что быстрее и чаще всего используется? Заранее спасибо.

Author: james, 2011-07-30

8 answers

Предположительно echo быстрее, но любой из них будет работать просто отлично.

Echo также предлагает синтаксис быстрого доступа при встраивании php в HTML. т.е.

    I have <?=$foo?> foo.

Против

     I have <?php echo $foo;?> foo.

См. http://us2.php.net/manual/en/function.echo.php

 11
Author: Ryan, 2013-10-12 15:21:46

И echo, и print являются языковыми конструкциями PHP (а не функциями). Что лучше, зависит от ваших приоритетов. Я бы рассмотрел три возможных приоритета: 1. вы упомянули скорость; 2. вы упомянули широкое использование; 3. Я бы добавил гибкость.

  1. Скорость: как упоминали многие другие, echo немного быстрее (особенно при использовании синтаксиса с несколькими аргументами, с элементами, разделенными запятыми), но разница настолько незначительна, что имеет значение только в коде с тысячами петель, где скорость действительно, действительно имеет значение. См. http://www.phpbench.com для контрольных показателей.

  2. Широкое использование: похоже, что по традиции echo чаще используется для PHP, чем print. Это довольно анекдотически, но я думаю, что вы придете к такому же выводу, когда будете читать PHP-код из самых разных источников.

  3. Гибкость: Я считаю, что печать определенно более гибкая, чем echo, в выражении кода. У Echo есть только один "преимущество" перед печатью: вы можете использовать следующий синтаксис: echo $arg1, $arg2, ..., используя запятые для перечисления ваших аргументов; печать не поддерживает синтаксис запятой. Однако вы можете заменить запятые точками (.) и получить точно такой же результат как в echo, так и в print: print $arg1. $arg2. .... Таким образом, этот синтаксис обеспечивает нулевое преимущество в гибкости и выразительности. Это небольшое преимущество, потому что это приводит к более быстрому коду, как я упоминал в № 1, но в 99 % кода это, вероятно, не имеет значения.

    Напротив, тот, то, что может сделать print, чего не может сделать echo, - это вернуть значение, и поэтому оно может полностью функционировать как функция. С одной стороны, это ограничено, потому что print всегда возвращает значение 1, несмотря ни на что. С другой стороны, вы можете сделать это с помощью print, но не с помощью echo:

    <?php ($age >= 18) ? print('Can vote.') : print('Cannot vote.'); ?>

    (Пример взят из PHP и MySQL Мураха 2010, стр.227)

    Таким образом, print может проявлять практически такую же гибкость в коде, как и echo, но у echo есть один существенный случай использования, когда он не может выполнять то, что печатает может сделать: печать может действовать как функция в контекстах, где это может быть полезно. (Я говорю "действовать как функция", потому что это не функция; это языковая конструкция, такая же, как echo.)

    Что касается синтаксиса сокращенного эха <?=$foo?> (<?php=$foo?> также работает с PHP 5.4: http://us2.php.net/manual/en/function.echo.php ), это можно было бы назвать сокращением для "эхо", но с таким же успехом вы могли бы назвать это сокращением для "печати", потому что это просто другая языковая конструкция. Здесь нет логического основание называть это "преимуществом" эха над печатью, как утверждают некоторые люди, поскольку эта конструкция не является ни эхом, ни печатью - это альтернативная конструкция, которая делает то же самое, что и обе.

Лично для меня я предпочитаю выбрать один и придерживаться его всегда. Лично я предпочитаю печать из-за ее несколько большего преимущества в гибкости кодирования, а также потому, что "печать" звучит для меня более интуитивно - это чисто субъективно. Мне все равно, что эхо, вероятно, больше широко используется, потому что печать одинаково хорошо понятна, если другим нужно прочитать мой код. Для 1 % кода, где скорость печати действительно имеет значение, я буду использовать echo.

 16
Author: Tripartio, 2014-04-30 00:08:55

Я проверил это сам:

$StartTime=microtime(1);
echo '<div style="display:none">';
for($i=0;$i<100000;$i++)
    echo "Hello world!<br />";

echo "</div>Echo: ".round(microtime(1)-$StartTime,5);

$StartTime=microtime(1);
echo '<div style="display:none">';
for($i=0;$i<100000;$i++)
    print "Hello world!<br />";

echo "</div><br />Print: ".round(microtime(1)-$StartTime,5);

Эхо примерно.09s
печать составляет от.3 до.5s

 5
Author: Jason Kaczmarsky, 2011-07-29 20:30:41

Это не влияет на способ отображения текста, но оба имеют разное поведение...

Например, print возвращает значение (true или false) в зависимости от того, может или не может отображать текст для печати; вместо этого echo просто выдает и продолжает.

Допустимо делать такие вещи:

if (print ($variable)) {
//do something
}

Это бессмысленно:

if (echo $variable) {
//do something
}
 5
Author: nEAnnam, 2013-09-03 20:46:30

Эхо быстрее. также echo() может печатать более 1 аргумента, print() может печатать только 1 аргумент.

 1
Author: rlemon, 2011-07-29 20:17:33

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

Вот некоторые доказательства сравнительного анализа: http://www.phpbench.com прокрутите вниз до "эхо против печати"

 0
Author: AlienWebguy, 2011-07-29 20:19:59

ИМО это не вопрос скорости. Если бы я разрабатывал приложение, в котором разница в скорости между echo и печатью имеет какое-либо значение, я бы счел это очень четким признаком использования другого (не интерпретируемого) языка программирования, чем PHP.

Но пока вы придерживаетесь PHP, это - IMvHO - просто вопрос вкуса. И кстати, я предпочитаю echo, но только потому, что это означает меньше печатать;)

 0
Author: wonk0, 2011-07-29 20:47:54

Самый быстрый способ эхо-вывода нескольких строк:

echo "string","string","string";

Для этого даже не нужно выполнять конкатенацию строки, она просто повторяет одну строку за другой. В print() нет ничего плохого, и я думаю, что в конце дня, если вы не повторяете миллионы строк, вы действительно не увидите разницы.

 0
Author: afuzzyllama, 2013-10-18 14:31:33