В чем разница между echo, print и print_r в PHP?


197

Я пользуюсь echoи print_rмногим, и почти никогда не пользуюсь print.

Я чувствую, echoчто это макрос, и print_rэто псевдоним var_dump.

Но это не стандартный способ объяснить различия.


3
print_r не совсем псевдоним var_dump - он выводит в другом формате. Примечательно, что выходные данные из var_dump также включают в себя «тип» каждой переменной.
Томасруттер


Еще одна деталь, которую можно добавить и которая может быть полезной, заключается в том, что var_dump усекает очень длинные тексты, показывая ... и указывая оставшуюся длину, например: even '... (length = 4482) Если вы используете echo, этого не происходит.
Йордан

Ответы:


186

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

var_dumpвыводит подробный дамп переменной, включая ее тип и тип любых подпунктов (если это массив или объект). print_rвыводит переменную в более понятной для человека форме: строки не заключаются в кавычки, информация о типах не указывается, размеры массивов не указываются и т. д.

var_dumpобычно более полезен, чем print_rпри отладке, по моему опыту. Это особенно полезно, когда вы не знаете точно, какие значения / типы у вас есть в ваших переменных. Рассмотрим эту тестовую программу:

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

С помощью print_rвы не можете определить разницу между 0и 0.0, или falseи '':

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

1
Что такое языковая конструкция?
OMG

1
@Shore - это что-то встроенное в язык, а не функция. Как правило, они очень быстрые и работают не так, как обычные функции.
Алекс

3
Отредактировано два года спустя, чтобы исправить неточности, указанные в этих комментариях. Спасибо всем, наверное, я спал 7 июня 2010 года. ;-)
Джон Кугельман


5
Скорей, юристу мобильный!
Джон Кугельман

100

эхо

  • Выводит одну или несколько строк, разделенных запятыми
  • Нет возвращаемого значения

    например echo "String 1", "String 2"

Распечатать

  • Выводит только одну строку
  • Возвращает 1, поэтому его можно использовать в выражении

    например print "Hello"

    или, if ($expr && print "foo")

print_r ()

  • Выходы удобочитаемома представления любого одного значения
  • Принимает не только строки, но и другие типы, включая массивы и объекты, форматируя их для чтения
  • Полезно при отладке
  • Может возвращать свой вывод как возвращаемое значение (вместо эха), если задан второй необязательный аргумент

var_dump ()

  • Выводит удобочитаемое представление одного или нескольких значений, разделенных запятыми
  • Принимает не только строки, но и другие типы, включая массивы и объекты, форматируя их для чтения
  • Используется другой формат вывода print_r(), например, он также печатает тип значений
  • Полезно при отладке
  • Нет возвращаемого значения

var_export ()

  • Выходы удобочитаемого и PHP-исполняемому представление любого одного значения
  • Принимает не только строки, но и другие типы, включая массивы и объекты, форматируя их для чтения
  • В обоих случаях используется другой формат вывода, print_r()и var_dump()- в результате получается правильный код PHP!
  • Полезно при отладке
  • Может возвращать свой вывод как возвращаемое значение (вместо эха), если задан второй необязательный аргумент

Ноты:

  • Несмотря на то, что они printмогут использоваться в выражениях, я рекомендую людям избегать этого, потому что это плохо сказывается на читаемости кода (и потому что вряд ли когда-либо будет полезным). Правила приоритета, когда он взаимодействует с другими операторами, также могут сбивать с толку. Из-за этого у меня лично никогда не было причины использовать это снова echo.
  • Тогда как echoи printявляются языковыми конструкциями, print_r()и var_dump()/ var_export()являются регулярными функциями. Вам не нужны скобки, чтобы заключить аргументы в echoили print(и если вы их используете, они будут обрабатываться так же, как и в выражении).
  • Хотя var_export()возвращает действительный код PHP, позволяющий позднее считывать значения, использование этого для производственного кода может упростить внедрение уязвимостей безопасности из-за необходимости использования eval(). Для хранения и чтения значений было бы лучше использовать такой формат, как JSON. Скорость будет сопоставимой.

3
Просто быстрое замечание о том, когда вам нужен echo $a, $b;синтаксис, когда вы можете просто сделать echo $a . $b;: если $ a или $ b действительно большие строки, то последняя будет использовать дополнительную память и время, создавая отдельную сцепленную версию строк в памяти перед этим. может начать вывод либо в браузер.
Томасруттер

Конечно, вы могли бы просто использовать echo $a; echo $b;тоже.
Томасруттер

16

Просто чтобы добавить к ответу Джона , echoдолжен быть единственный, который вы используете для печати контента на странице.

printнемного медленнее. var_dump()и print_r()должен использоваться только для отладки.

Стоит также отметить , что print_r()и var_dump()отзовется по умолчанию, добавить второй аргумент , по print_r()крайней мере , которое вычисляется верно , чтобы заставить его вернуться вместо этого, например print_r($array, TRUE).

Разница между эхом и возвратом:

  • echo: немедленно выведет значение на выход.
  • returning: возвратит вывод функции в виде строки. Полезно для регистрации и т. Д.

Только потому, что вы подняли вопрос, в чем разница между echoing и returning?
Дэвид говорит восстановить Монику

2
ничего себе, я хотел бы знать о возвращаемом параметре :( в основном вы можете сделать $ foo = print_r ($ array, true) и использовать его другими способами (в журнал, таблицу и т. д.)
FryGuy

Я print_rдовольно часто использовал возвращаемый параметр, когда писал код PHP. Тем не менее, я, как правило, писал print_r( $foo, 1 );. Это быстрее печатать;) И по этому поводу меня не очень заботит удобочитаемость, так как я нахожу название print_rне слишком наглядным.
exhuma

var_dump()не поддерживает второй аргумент, позволяющий ему возвращать значение, как print_r()делает, потому что var_dump()может принимать несколько аргументов для вывода.
Томасруттер

@thomasrutter Правда, не уверен, почему я это написал.
Алекс

6
echo

Не имея тип возврата

print

Иметь тип возврата

print_r()

Выходы в формате


5

Разница между echo , print , print_r и var_dump очень проста.

эхо

На самом деле echo - это не функция, а языковая конструкция, которая используется для вывода на печать. Это немного быстрее, чем печать.

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

Вы также можете использовать выражение echo с круглыми скобками или без них

echo ("Hello World");   // this will print Hello World

Распечатать

Так же, как эхо- конструкция, печать также является языковой конструкцией, а не реальной функцией. Различия между echo и print в том, что print принимает только один аргумент, а print всегда возвращает 1. Принимая во внимание, что echo не имеет возвращаемого значения. Таким образом, оператор print может использоваться в выражениях.

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

Как и эхо , печать может использоваться с круглыми скобками или без них.

print ("Hello World");   // this will print Hello World

print_r

Функция print_r () используется для печати понятной человеку информации о переменной. Если аргумент является массивом, функция print_r () печатает свои ключи и элементы (то же самое для объектов).

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 

var_dump

Функция var_dump обычно используется для отладки и печатает информацию (тип и значение) о переменной / массиве / объекте.

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }

3

Эхо :

Это утверждение, а не функция Нет возвращаемого значения

Не требуются скобки

Не печатать массив

Распечатать

Это реальная функция

Тип возврата 1

Обязательные скобки

Не печатать массив

print_r

Печать в удобочитаемом формате

Строка не в кавычках

Не подробная информация о переменной, как тип и все

var_dump

Вся информация о дампе переменной, такая как тип элемента и вложенного элемента


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

2
... и вы отправили этот ответ, когда несколько ответов уже существуют и содержат правильную информацию.
Томасруттер

2

** Echocan принимать несколько выражений, а печать - нет. PHP-функция Print_r () используется для возврата массива в удобочитаемой форме. Это просто написано как

![Print_r ($your_array)][1]

2

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

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

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

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf: это функция, которая принимает как минимум одну строку и стиль форматирования и возвращает длину выходной строки.

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf


0

print_r () может распечатать значение, но также, если второй параметр флага передан и равен TRUE - он вернет напечатанный результат в виде строки и ничего не отправит на стандартный вывод. О var_dump. Если установлен отладчик XDebug, выходные результаты будут отформатированы гораздо более читабельным и понятным способом.


-1

они оба являются языковыми конструкциями. echo возвращает void и print возвращает 1. echo считается немного быстрее, чем print.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.