¿Cuál es la diferencia entre echo, print e print_r en PHP?

197

Yo uso echoy print_rmucho, y casi nunca uso print.

Siento que echoes una macro, y print_res un alias devar_dump .

Pero esa no es la forma estándar de explicar las diferencias.

Mak
fuente
3
print_r no es exactamente un alias de var_dump: se genera en un formato diferente. En particular, la salida de var_dump también incluye el "tipo" de cada variable.
thomasrutter
Otro detalle para agregar y que puede ser útil, es que var_dump trunca textos muy largos, mostrando ... e indicando la longitud restante, por ejemplo: incluso '... (longitud = 4482) Si usa echo esto no sucede.
Yordan

Respuestas:

186

printy echoson más o menos lo mismo; Ambos son construcciones de lenguaje que muestran cadenas. Las diferencias son sutiles: printtiene un valor de retorno de 1, por lo que puede usarse en expresiones, mientras que echotiene un voidtipo de retorno; echopuede tomar múltiples parámetros, aunque dicho uso es raro; echoes ligeramente más rápido queprint . (Personalmente, siempre uso echo, nunca print).

var_dumpimprime un volcado detallado de una variable, incluido su tipo y el tipo de cualquier subelemento (si se trata de una matriz o un objeto). print_rimprime una variable en una forma más legible para el ser humano: las cadenas no se citan, se omite la información de tipo, no se proporcionan los tamaños de matriz, etc.

var_dumpPor lo general, es más útil que print_rcuando se depura, en mi experiencia. Es particularmente útil cuando no sabe exactamente qué valores / tipos tiene en sus variables. Considere este programa de prueba:

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

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

Con print_rusted no puede distinguir la diferencia entre 0y 0.0, o falsey '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
fuente
1
¿Qué es la estructura del lenguaje?
omg
1
@Shore: es algo integrado en el lenguaje que no es una función. Generalmente son muy rápidos y no funcionan exactamente como las funciones normales.
alex
3
Editado dos años después para corregir las imprecisiones identificadas en estos comentarios. Gracias a todos, debo haber estado durmiendo el 7 de junio de 2010. ;-)
John Kugelman
55
¡Rápido, al abogado móvil!
John Kugelman
100

eco

  • Emite una o más cadenas separadas por comas
  • Sin valor de retorno

    p.ej echo "String 1", "String 2"

impresión

  • Produce solo una cadena
  • Devoluciones 1 , por lo que se puede usar en una expresión

    p.ej print "Hello"

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

print_r ()

  • Salidas de una representación legible de cualquier uno valor
  • Acepta no solo cadenas, sino otros tipos, incluidas matrices y objetos, formateándolos para que sean legibles
  • Útil al depurar
  • Puede devolver su salida como un valor de retorno (en lugar de hacer eco) si se da el segundo argumento opcional

var_dump ()

  • Produce una representación legible por humanos de uno o más valores separados por comas
  • Acepta no solo cadenas, sino otros tipos, incluidas matrices y objetos, formateándolos para que sean legibles
  • Utiliza un formato de salida diferente para print_r(), por ejemplo, también imprime el tipo de valores
  • Útil al depurar
  • Sin valor de retorno

var_export ()

  • Da salida a una legible y PHP ejecutable representación de cualquier uno valor
  • Acepta no solo cadenas, sino otros tipos, incluidas matrices y objetos, formateándolos para que sean legibles
  • Utiliza un formato de salida diferente para ambos print_r()yvar_dump() , ¡la salida resultante es un código PHP válido!
  • Útil al depurar
  • Puede devolver su salida como un valor de retorno (en lugar de hacer eco) si se da el segundo argumento opcional

Notas:

  • Aunque printpuede usarse en una expresión, recomiendo que las personas eviten hacerlo, porque es malo para la legibilidad del código (y porque es poco probable que alguna vez sea útil). Las reglas de precedencia cuando interactúa con otros operadores también pueden ser confusas. Debido a esto, personalmente nunca tengo una razón para usarlo echo.
  • Mientras que echoy printson construcciones del lenguaje, print_r()y var_dump()/ var_export()son funciones regulares. No necesita paréntesis para encerrar los argumentos echooprint (y si los usa, se tratarán como lo harían en una expresión).
  • Si bien var_export()devuelve un código PHP válido que permite leer los valores más tarde, confiar en esto para el código de producción puede facilitar la introducción de vulnerabilidades de seguridad debido a la necesidad de usar eval(). Sería mejor usar un formato como JSON en su lugar para almacenar y volver a leer los valores. La velocidad será comparable.
thomasrutter
fuente
3
Solo una nota rápida sobre cuándo desearía la echo $a, $b;sintaxis cuando puede hacerlo echo $a . $b;: si $ ao $ b son cadenas realmente grandes, entonces este último usará memoria y tiempo adicionales para crear una versión concatenada separada de las cadenas en la memoria anterior. puede comenzar a dar salida al navegador.
thomasrutter
Por supuesto, también podrías usarlo echo $a; echo $b;.
thomasrutter
16

Solo para agregar a la respuesta de John , echodebería ser el único que use para imprimir contenido en la página.

printEs un poco más lento. var_dump()yprint_r() solo debe usarse para depurar.

También vale la pena mencionar que, print_r()y var_dump()por eco, por defecto, agregue un segundo argumento al print_r()menos que se evalúe como verdadero para que regrese, por ejemploprint_r($array, TRUE) .

La diferencia entre hacer eco y volver son:

  • echo: imprimirá inmediatamente el valor a la salida.
  • return: devolverá la salida de la función como una cadena. Útil para iniciar sesión, etc.
alex
fuente
Solo porque planteaste el problema, ¿cuál es la diferencia entre echoing y returning?
David dice que reinstale a Monica el
2
wow, desearía saber sobre el parámetro de retorno :( básicamente puedes hacer $ foo = print_r ($ array, true); y usarlo de otras maneras (en un registro, tabla, etc.)
FryGuy
He usado mucho el print_rparámetro de retorno mientras codificaba PHP. Sin embargo, tendía a escribir print_r( $foo, 1 );. Es más rápido escribir;) Y sobre esto no me importa mucho la legibilidad ya que el nombre print_rtampoco me parece muy descriptivo.
exhuma
var_dump()no admite el segundo argumento, lo que le permite devolver un valor como print_r()sí, porque var_dump()puede aceptar múltiples argumentos para generar.
thomasrutter
@thomasrutter Es cierto, no estoy seguro de por qué escribí eso.
alex
6
echo

No tener tipo de devolución

print

Tener tipo de devolución

print_r()

Salidas como formateadas,

usuario1899888
fuente
5

La diferencia entre echo , print , print_r y var_dump es muy simple.

eco

echo no es en realidad una función sino una construcción de lenguaje que se utiliza para imprimir la salida. Es marginalmente más rápido que la impresión.

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)

También puede usar la declaración echo con o sin paréntesis

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

impresión

Al igual que echo construct print, también es una construcción de lenguaje y no una función real. La diferencia entre echo e print es que print solo acepta un único argumento y print siempre devuelve 1. Mientras que echo no tiene valor de retorno. Entonces, la declaración de impresión se puede usar en expresiones.

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)

Al igual que echo , la impresión se puede usar con o sin paréntesis.

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

print_r

La función print_r () se usa para imprimir información legible por humanos sobre una variable. Si el argumento es una matriz, la función print_r () imprime sus claves y elementos (lo mismo para los objetos).

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

La función var_dump generalmente se usa para depurar e imprime la información (tipo y valor) sobre una variable / matriz / objeto.

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
fuente
3

Eco :

Es una declaración, no una función Sin valor de retorno

No se requieren los paréntesis

No imprimir matriz

Impresión

Es una función real

Tipo de retorno 1

Requerido los paréntesis

No imprimir matriz

Imprimir_r

Imprimir en formato legible para humanos

Cadena no entre comillas

Información no detallada de tipo variable y todo

var_dump

Toda la información de volcado de variables como tipo de elemento y subelemento

Subterráneo
fuente
2
Hay tantos problemas con esta respuesta. Noprint es una función real, es una construcción de lenguaje como echo. También se puede usar como una declaración. no es una declaración ni se puede usar en una. no no requiere paréntesis, ni tampoco eco o impresión utilizan los paréntesis, como una función haría. También se perdió una de las principales diferencias: echo acepta múltiples cadenas para hacer eco separadas por comas. echoprint
thomasrutter
2
... y envió esta respuesta cuando ya existían varias respuestas y contenían la información correcta .
thomasrutter
2

** Echocan acepta múltiples expresiones mientras que print no puede. La función PHP Print_r () se usa para devolver una matriz en una forma legible para humanos. Simplemente se escribe como

![Print_r ($your_array)][1]
shaik afroz
fuente
2

echo: echo es una construcción de lenguaje en la que no es necesario usar paréntesis y puede tomar cualquier número de parámetros y devolver void.

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

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

print: es una construcción de lenguaje donde no es necesario usar paréntesis, solo toma un parámetro y devuelve

    1 always.

           int print(param1);

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

prinf: es una función que toma al menos una cadena y estilo de formato y devuelve la longitud de la cadena de salida.

    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
fuente
2

print_r() se utiliza para imprimir la matriz en formato legible para humanos.

vaibhav kulkarni
fuente
0

print_r () puede imprimir el valor, pero también si se pasa el segundo parámetro de indicador y es VERDADERO: devolverá el resultado impreso como una cadena y nada se enviará a la salida estándar. Sobre var_dump. Si se instala el depurador XDebug, los resultados de salida se formatearán de una manera mucho más legible y comprensible.

Rinat
fuente
-1

Ambos son construcciones del lenguaje. echo devuelve nulo e print devuelve 1. echo se considera un poco más rápido que print.

prueba
fuente