Diferença entre var_dump, var_export e print_r

126

Qual é a diferença entre var_dump, var_exporte print_r?

Manish Trivedi
fonte
14
Às vezes, é mais fácil pedir a alguém para entender melhor do que ler manuais.
Deepak Lamichhane 6/12/12
11
@ Suas respostas do senso comum são geralmente mais claras, concisas, acionáveis ​​e basicamente sempre mais fáceis de fazer referência do que o manual do PHP.
Mark Fox

Respostas:

194

var_dump é para fins de depuração. var_dumpsempre imprime o 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 também é para fins de depuração, mas não inclui o tipo de membro. É uma boa ideia usar se você conhece os tipos de elementos em sua matriz, mas pode ser enganador. print_rpor padrão, imprime o resultado, mas permite retornar como sequência usando o$returnparâmetroopcional

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

var_export imprime código php válido. Útil se você calculou alguns valores e deseja os resultados como constantes em outro script. Note-se quevar_exportnão pode lidar com ciclos de referência / matrizes recursivos, enquantovar_dumpeprint_rvá para estes. var_exportpor padrão, imprime o resultado, mas permite retornar como sequência usando o$returnparâmetroopcional

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

Pessoalmente, acho que var_exporté o melhor compromisso conciso e preciso.

phihag
fonte
51
Observe que var_export, devido à sua natureza, sofrerá uma terrível morte recursiva em, bem, matrizes recursivas. print_re var_dump(embora não tenha muita certeza sobre o último, já que geralmente não o uso) não tem esse problema. Então não var_export($_GLOBALS);, por exemplo (que se contém). :)
pinkgothic
@ftrotter Eu sempre achei que o comentário explicaria bem essa curiosidade, mas lá vai você, acrescentou uma breve nota à resposta.
Phihag #
1
Deve-se acrescentar que você pode fazer com que print_r () e var_export () retornem uma string em vez de produzi-la, enquanto var_dump () não pode fazê-lo. Além disso, não gosto de var_export (), pois é confuso - se você tentar exportar alguma constante indefinida SOMECONST, receberá apenas uma string de texto 'SOMECONST'. Portanto, ele não diz NULL, 0, "", mas presume que seja uma string (e suponho que você também lance um AVISO).
userfuser
1
var_export é bom para representar com segurança uma string, como proteção de citação / barra invertida.
Dkellner
1
Pessoalmente, eu prefiro a var_dumpsaída. Pena que não permite retornar a saída como uma string. Como tal, posso me relacionar com o sentimento de @ iconoclast no comentário acima. Mas ter que optar var_exportpor var_dumpesse caso de uso é aceitável para mim. Para completar, observe esta solicitação de recurso relacionada .
Paul van Leeuwen
3

var_dumpe var_exportrelacionar assim (do manual )

var_export () obtém informações estruturadas sobre a variável especificada. É semelhante ao var_dump () com uma exceção: a representação retornada é um código PHP válido.

Eles diferem do print_rque var_dumpexporta mais informações, como o tipo de dados e o tamanho dos elementos.

Nanne
fonte