Jaka jest różnica między echo, print i print_r w PHP?

197

Używam echoi print_rdużo i prawie nigdy nie używam print.

Wydaje mi się, że echoto makro i print_rto pseudonim var_dump.

Ale to nie jest standardowy sposób wyjaśniania różnic.

Mak
źródło
3
print_r nie jest dokładnie aliasem var_dump - wyświetla dane w innym formacie. W szczególności dane wyjściowe z var_dump zawierają również „typ” każdej zmiennej.
thomasrutter
Kolejnym szczegółem do dodania, który może być przydatny, jest to, że var_dump obcina bardzo długie teksty, pokazując ... i wskazując pozostałą długość, na przykład: nawet '... (długość = 4482) Jeśli użyjesz echa, tak się nie stanie.
Yordan

Odpowiedzi:

186

printi echosą mniej więcej takie same; oba są konstrukcjami językowymi wyświetlającymi ciągi znaków. Różnice są subtelne: printma wartość zwracaną 1, więc można jej używać w wyrażeniach, podczas gdy echoma voidtyp zwracany; echomoże przyjmować wiele parametrów, chociaż takie użycie jest rzadkie; echojest nieco szybszy niżprint . (Osobiście zawsze używam echo, nigdy print.)

var_dumpwypisuje szczegółowy zrzut zmiennej, w tym jej typ i typ dowolnych podelementów (jeśli jest to tablica lub obiekt). print_rwypisuje zmienną w bardziej czytelnej dla człowieka formie: ciągi nie są cytowane, informacje o typie są pomijane, rozmiary tablic nie są podawane itp.

var_dumpprint_rz mojego doświadczenia jest zwykle bardziej przydatna niż podczas debugowania. Jest to szczególnie przydatne, gdy nie wiesz dokładnie, jakie wartości / typy masz w zmiennych. Rozważ ten program testowy:

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

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

Ze print_rnie można odróżnić 0i 0.0lub falsei '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
źródło
1
Co to jest konstrukcja językowa?
omg
1
@Shore - jest to coś wbudowanego w język, który nie jest funkcją. Są na ogół bardzo szybkie i nie działają dokładnie tak jak normalne funkcje.
alex
3
Edytowane dwa lata później, aby poprawić niedokładności określone w tych komentarzach. Dzięki wszystkim, musiałem spać 7 czerwca 2010 roku. ;-)
John Kugelman
5
Szybko, do prawnika komórkowego!
John Kugelman
100

Echo

  • Zwraca jeden lub więcej ciągów oddzielonych przecinkami
  • Brak wartości zwracanej

    na przykład echo "String 1", "String 2"

wydrukować

  • Wyprowadza tylko jeden ciąg
  • Zwraca 1, więc można go użyć w wyrażeniu

    na przykład print "Hello"

    lub, if ($expr && print "foo")

print_r ()

  • Wyjścia reprezentacji czytelnej dla człowieka każdej jednej wartości
  • Akceptuje nie tylko łańcuchy, ale także inne typy, w tym tablice i obiekty, formatując je tak, aby były czytelne
  • Przydatne podczas debugowania
  • Może zwrócić wynik jako wartość zwracaną (zamiast echa), jeśli podany zostanie drugi opcjonalny argument

var_dump ()

  • Generuje czytelną dla człowieka reprezentację jednej lub więcej wartości oddzielonych przecinkami
  • Akceptuje nie tylko łańcuchy, ale także inne typy, w tym tablice i obiekty, formatując je tak, aby były czytelne
  • Używa innego formatu wyjściowego print_r(), na przykład drukuje również typ wartości
  • Przydatne podczas debugowania
  • Brak wartości zwracanej

var_export ()

  • Wyjścia w czytelnej dla człowieka i PHP-wykonywalnego reprezentacji każdej jednej wartości
  • Akceptuje nie tylko łańcuchy, ale także inne typy, w tym tablice i obiekty, formatując je tak, aby były czytelne
  • Używa innego formatu wyjściowego zarówno print_r()ivar_dump() - wynikowy wynik jest prawidłowym kodem PHP!
  • Przydatne podczas debugowania
  • Może zwrócić wynik jako wartość zwracaną (zamiast echa), jeśli podany zostanie drugi opcjonalny argument

Uwagi:

  • Mimo że printmożna go użyć w wyrażeniu, zalecam, aby ludzie tego unikali, ponieważ ma to negatywny wpływ na czytelność kodu (i ponieważ jest mało prawdopodobne, aby kiedykolwiek był użyteczny). Zasada pierwszeństwa podczas interakcji z innymi operatorami może być również myląca. Z tego powodu osobiście nigdy nie mam powodu, aby z niego korzystać echo.
  • Natomiast echoi printsą konstrukcje językowe, print_r()i var_dump()/ var_export()regularne funkcje. Nie potrzebujesz nawiasów, aby dołączyć argumenty do echolubprint (a jeśli ich użyjesz, będą traktowane jak w wyrażeniu).
  • Chociaż var_export()zwraca prawidłowy kod PHP, umożliwiając późniejsze odczytanie wartości, poleganie na nim w kodzie produkcyjnym może ułatwić wprowadzenie luk w zabezpieczeniach z powodu potrzeby użycia eval(). Lepiej byłoby użyć formatu takiego jak JSON zamiast do przechowywania i odczytywania wartości. Prędkość będzie porównywalna.
thomasrutter
źródło
3
Krótka uwaga na temat tego, kiedy chcesz mieć echo $a, $b;składnię, kiedy możesz to zrobić echo $a . $b;: jeśli $ a lub $ b są naprawdę dużymi łańcuchami, wówczas ta ostatnia zużyje dodatkową pamięć i czas, tworząc oddzielną połączoną wersję łańcuchów w pamięci przed nią może rozpocząć wyświetlanie w przeglądarce.
thomasrutter
Oczywiście możesz też po prostu użyć echo $a; echo $b;.
thomasrutter
16

Aby dodać do odpowiedzi Johna , echopowinna być jedyną, której używasz do drukowania treści na stronie.

printjest nieco wolniejszy. var_dump()i print_r()powinien być używany tylko do debugowania.

Warto również wspomnieć, że print_r()i var_dump()domyślnie odbije się echem, dodaj drugi argument do print_r()co najmniej wartości true, aby zamiast tego powrócił, np print_r($array, TRUE).

Różnica między echem a zwracaniem to:

  • echo: natychmiast wydrukuje wartość na wyjściu.
  • returning: Zwraca wynik funkcji jako ciąg znaków. Przydatny do logowania itp.
alex
źródło
Tylko dlatego, że podniosłeś problem, jaka jest różnica między echoingiem a returningiem?
David mówi, że przywróć Monikę
2
wow, chciałbym wiedzieć o zwracanym parametrze :( w zasadzie możesz zrobić $ foo = print_r ($ tablica, prawda); i użyć go na inne sposoby (do dziennika, tabeli itp.)
FryGuy
print_rPodczas kodowania PHP dość często korzystałem ze zwracanego parametru. Jednak miałem tendencję do pisania print_r( $foo, 1 );. Szybsze jest pisanie;) I o tym nie dbam zbytnio o czytelność, ponieważ nazwa print_rnie jest zbyt opisowa.
ekshuma
var_dump()nie obsługuje drugiego argumentu, pozwalając mu zwrócić wartość taką jak print_r()robi, ponieważ var_dump()może zaakceptować wiele argumentów do wyjścia.
thomasrutter
@ thomasrutter Prawda, nie jestem pewien, dlaczego to napisałem.
alex
6
echo

Brak typu zwrotu

print

Podaj typ zwrotu

print_r()

Wyjścia w formacie sformatowanym,

użytkownik1899888
źródło
5

Różnica między echo , print , print_r i var_dump jest bardzo prosta.

Echo

echo nie jest w rzeczywistości funkcją, ale konstrukcją języka używaną do wydruku. Jest nieznacznie szybszy niż wydruk.

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)

Możesz także użyć instrukcji echo z nawiasami lub bez

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

wydrukować

Podobnie jak druk konstrukcji echa jest również konstrukcją języka, a nie rzeczywistą funkcją. Różnice między echem a drukowaniem polegają na tym, że print przyjmuje tylko jeden argument, a print zawsze zwraca 1. Natomiast echo nie ma wartości zwracanej. Tak więc instrukcja print może być używana w wyrażeniach.

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)

Podobnie jak echo , druk może być używany z nawiasami lub bez nich.

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

print_r

Funkcja print_r () służy do drukowania czytelnych dla człowieka informacji o zmiennej. Jeśli argumentem jest tablica, funkcja print_r () drukuje klucze i elementy (to samo dla obiektów).

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

Funkcja var_dump zwykle używana do debugowania i wyświetla informacje (typ i wartość) o zmiennej / tablicy / obiekcie.

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" }
N Randhawa
źródło
3

Echo :

Jest to instrukcja, a nie funkcja Brak wartości zwracanej

Nie wymagane nawiasy

Nie drukuj macierzy

Wydrukować

To prawdziwa funkcja

Typ zwrotu 1

Wymagane nawiasy

Nie drukuj macierzy

Drukuj_r

Drukuj w formacie czytelnym dla człowieka

Ciąg nie jest w cudzysłowie

Brak szczegółowych informacji o typie zmiennej i wszystkich

var_dump

Wszystkie informacje o zrzutu zmiennej, takie jak typ elementu i podelementu

Pod ziemią
źródło
2
Z tą odpowiedzią jest tyle problemów. printto nie prawdziwa funkcja jest konstruktem język jak echo. Może być również użyty jako instrukcja. echoto nie oświadczenie nie może być używany w jednym. printnie nie wymaga nawiasów, ani nie ani echa lub wydrukować używać nawiasów jak funkcja będzie. Pominąłeś także jedną z głównych różnic - echo akceptuje wiele ciągów znaków do echa oddzielonych przecinkami.
thomasrutter
2
... i przesłałeś tę odpowiedź, gdy kilka odpowiedzi już istniało i zawierało prawidłowe informacje.
thomasrutter
2

** Echocan akceptuje wiele wyrażeń, podczas gdy drukowanie nie. Funkcja PHP Print_r () służy do zwracania tablicy w postaci czytelnej dla człowieka. Jest po prostu napisane jako

![Print_r ($your_array)][1]
Shaik Afroz
źródło
2

echo: echo jest konstrukcją językową, w której nie jest wymagane używanie w nim nawiasów i może przyjmować dowolną liczbę parametrów i zwracać nieważność.

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

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

print: jest to konstrukcja językowa, w której nie trzeba używać nawiasów, wystarczy pobrać jeden parametr i zwrócić

    1 always.

           int print(param1);

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

prinf: Jest to funkcja, która pobiera co najmniej jeden ciąg znaków i styl formatu oraz zwraca długość ciągu wyjściowego.

    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
Shailesh Thapa
źródło
2

print_r() służy do drukowania tablicy w formacie czytelnym dla człowieka.

vaibhav kulkarni
źródło
0

print_r () może wydrukować wartość, ale także jeśli drugi parametr flagi zostanie przekazany i ma wartość PRAWDA - zwróci wydrukowany wynik jako ciąg i nic nie zostanie wysłane na standardowe wyjście. O var_dump. Jeśli zainstalowany jest debuger XDebug, wyniki wyjściowe zostaną sformatowane w znacznie bardziej czytelny i zrozumiały sposób.

Rinat
źródło
-1

oba są konstrukcjami językowymi. echo zwraca nieważność, a druk zwraca 1. echo jest uważane za nieco szybsze niż druk.

test
źródło