Diferencia entre var_dump, var_export y print_r

126

¿Cuál es la diferencia entre var_dump,var_export y print_r?

Manish Trivedi
fuente
14
A veces es más fácil pedirle a otra persona que comprenda mejor que leer manuales.
Deepak Lamichhane
11
@Sus respuestas de Common Sense SO a menudo son más claras, más concisas, accionables y, básicamente, siempre son más fáciles de consultar que el manual de PHP.
Mark Fox

Respuestas:

194

var_dump es para propósitos de depuración. var_dumpsiempre imprime el resultado.

// var_dump(array('', false, 42, array('42')));
array(4) {
  [0]=> string(0) ""
  [1]=> bool(false)
  [2]=> int(42)
  [3]=> array(1) {[0]=>string(2) "42")}
}

print_r también tiene fines de depuración, pero no incluye el tipo de miembro. Es una buena idea usarlo si conoce los tipos de elementos en su matriz, pero de lo contrario puede ser engañoso. print_rde forma predeterminada imprime el resultado, pero permite volver como una cadena en su lugar mediante el uso del$returnparámetroopcional.

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

var_export imprime un código php válido. Útil si calculó algunos valores y desea que los resultados sean una constante en otro script. Tenga en cuenta quevar_exportno puede manejar ciclos de referencia / matrices recursivas, mientras quevar_dumpyprint_rverifique estos. var_exportde forma predeterminada imprime el resultado, pero permite volver como una cadena en su lugar mediante el uso del$returnparámetroopcional.

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

Personalmente, creo que var_exportes el mejor compromiso de conciso y preciso.

phihag
fuente
51
Tenga en cuenta que var_export, debido a su naturaleza, morirá una muerte recursiva horrible en, bueno, matrices recursivas. print_ry var_dump(aunque no estoy completamente seguro de esto último, ya que generalmente no lo uso) no tengo ese problema. Así que no var_export($_GLOBALS);, por ejemplo (que se contiene a sí mismo). :)
pinkgothic
@ftrotter Siempre pensé que el comentario explicaría bien esa curiosidad, pero ahí tienes, agregué una breve nota a la respuesta.
phihag
1
Debe agregarse que puede hacer que print_r () y var_export () devuelvan una cadena en lugar de generarla, mientras que var_dump () no puede hacerlo. Además, no me gusta var_export () ya que es confuso: si intenta exportar alguna SOMECONST constante indefinida, simplemente obtendrá una cadena de texto 'SOMECONST'. Por lo tanto, no dirá NULL, 0, "", pero en realidad supondrá que es una cadena (y supongo que también arrojará un AVISO).
usuariofusor
1
var_export es bueno para representar de forma segura una cadena, como la protección de comillas / barra invertida.
dkellner
1
Personalmente prefiero la var_dumpsalida. Lástima que no permite devolver la salida como una cadena. Como tal, puedo relacionarme con el sentimiento de @ iconoclast en el comentario anterior. Pero tener que elegir var_exportmás var_dumppara este caso de uso es aceptable para mí. Para completar, tenga en cuenta esta solicitud de función relacionada .
Paul van Leeuwen
3

var_dumpy var_exportrelacionarse así (del manual )

var_export () obtiene información estructurada sobre la variable dada. Es similar a var_dump () con una excepción: la representación devuelta es un código PHP válido.

Difieren de print_r que var_dumpexporta más información, como el tipo de datos y el tamaño de los elementos.

Nanne
fuente