Яка різниця між echo, print та print_r у PHP?


197

Я використовую echoі print_rбагато, і майже ніколи не використовую print.

Я вважаю echo, що це макрос і print_rє псевдонімом var_dump.

Але це не стандартний спосіб пояснення відмінностей.


3
print_r - це не псевдонім var_dump - він виводиться в іншому форматі. Зокрема, вихід з var_dump також включає "тип" кожної змінної.
thomasrutter


Ще однією деталлю, яка може бути корисною, є те, що 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 - це щось вбудоване в мову, яка не є функцією. Як правило, вони дуже швидкі і не працюють так, як звичайні функції.
alex

3
Відредаговано через два роки, щоб виправити неточності, виявлені в цих коментарях. Дякую всім, я, мабуть, спав 7 червня '10. ;-)
Джон Кугельман


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 - це дійсно великі рядки, то останній буде використовувати додаткову пам'ять і час, створюючи перед цим окрему з'єднану версію рядків у пам'яті може почати виводити або в браузер.
thomasrutter

Звичайно, ви могли просто використати echo $a; echo $b;теж.
thomasrutter

16

Просто, щоб додати відповідь Джона , echoмає бути єдиним, який ви використовуєте для друку вмісту на сторінку.

printтрохи повільніше. var_dump()і print_r()слід використовувати лише для налагодження.

Також варто згадати те, що, print_r()і var_dump()за замовчуванням лунає, додайте другий аргумент print_r()принаймні, що оцінює істинний, щоб змусити його повернутися, наприклад print_r($array, TRUE).

Різниця між відлунням і поверненням:

  • echo: Одразу надрукує значення на вихід.
  • return: Повертає висновок функції у вигляді рядка. Корисно для ведення лісозаготівлі тощо.

Тільки тому, що ви начебто порушили це питання, у чому різниця між echoінґ та return?
Девід каже повернути Моніку

2
Нічого б, я хотів би, щоб я знав про параметр, що повертається :( в основному ви можете зробити $ foo = print_r ($ масив, правда); і використовувати його іншими способами (у журнал, таблицю тощо)
FryGuy

Я print_rдосить багато використовував параметр, що повертався, коли кодував PHP. Однак я схильний писати print_r( $foo, 1 );. Це швидше набирати;) І з цього приводу я не дуже переймаюся читабельністю, оскільки я вважаю, що ім'я також print_rне дуже описове.
ексгума

var_dump()не підтримує другий аргумент, що дозволяє йому повернути значення, як print_r()це робиться, тому що var_dump()може приймати для виведення декілька аргументів.
thomasrutter

@thomasrutter Щоправда, не впевнений, чому я це написав.
alex


5

Різниця між луною , печаткою , 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 - це також мовна конструкція, а не реальна функція. Різниця між ехо і друком полягає в тому, що друк приймає лише один аргумент, а друк завжди повертається 1. Тоді як ехо не має значення повернення. Тож оператор друку може використовуватися у виразах.

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зовсім НЕ вимагає дужок, ні робити або відлуння або друк використовувати круглі дужки , як буде функціонувати. Ви також пропустили одну з головних відмінностей - ехо приймає кілька рядків, щоб відлуння розділяються комами.
thomasrutter

2
... і ви надіслали цю відповідь, коли кілька відповідей уже існували і містили правильну інформацію.
thomasrutter

2

** Echocan може приймати кілька виразів, тоді як друк не може. Функція PHP Print_r () використовується для повернення масиву в читаній людині формі. Це просто написано як

![Print_r ($your_array)][1]

2

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

   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

2

print_r() використовується для друку масиву у читаному для людини форматі.


0

print_r () може роздрукувати значення, але також якщо другий параметр прапорця буде істинним істинним - він поверне друкований результат у вигляді рядка і нічого не надсилатиме до стандартного виводу. Про var_dump. Якщо встановлений налагоджувач XDebug, результати виводу будуть форматовані набагато більш читабельним та зрозумілим способом.


-1

вони обоє є мовними конструкціями. ехо повертає недійсним і повернення до друку 1. Ехо вважається трохи швидшим, ніж друк.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.