Qual é a diferença entre eco, impressão e print_r no PHP?

197

Eu uso echoe print_rmuito, e quase nunca uso print.

Eu sinto que echoé uma macro e print_ré um pseudônimo de var_dump.

Mas essa não é a maneira padrão de explicar as diferenças.

Mak
fonte
3
print_r não é exatamente um alias de var_dump - ele gera um formato diferente. Notavelmente, a saída de var_dump também inclui o "tipo" de cada variável.
thomasrutter
Outro detalhe a ser adicionado e que pode ser útil é que var_dump trunca textos muito longos, mostrando ... e indicando o tamanho restante, por exemplo: even '... (length = 4482) Se você usar echo, isso não acontecerá.
Yordan

Respostas:

186

printe echosão mais ou menos iguais; ambos são construções de linguagem que exibem seqüências de caracteres. As diferenças são sutis: printpossui um valor de retorno 1, portanto pode ser usado em expressões, enquanto echopossui um voidtipo de retorno; echopode assumir vários parâmetros, embora esse uso seja raro; echoé um pouco mais rápido queprint . (Pessoalmente, eu sempre uso echo, nunca print.)

var_dumpimprime um despejo detalhado de uma variável, incluindo seu tipo e o tipo de qualquer subitem (se for uma matriz ou um objeto). print_rimprime uma variável de uma forma mais legível para o ser humano: seqüências de caracteres não são citadas, informações de tipo são omitidas, tamanhos de matriz não são fornecidos etc.

var_dumpgeralmente é mais útil do que print_rna depuração, na minha experiência. É particularmente útil quando você não sabe exatamente quais valores / tipos você tem em suas variáveis. Considere este programa de teste:

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

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

Com print_rvocê, você não pode dizer a diferença entre 0e 0.0, ou falsee '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
fonte
1
O que é a estrutura da linguagem?
Omg
1
@Shore - é algo incorporado à linguagem que não é uma função. Eles geralmente são muito rápidos e não operam exatamente como as funções normais.
alex
3
Editado dois anos depois para corrigir as imprecisões identificadas nesses comentários. Obrigado a todos, eu devo estar dormindo em 7 de junho de 2010. ;-)
John Kugelman
5
Rápido, para o advogado móvel!
John Kugelman
100

eco

  • Produz uma ou mais cadeias separadas por vírgulas
  • Sem valor de retorno

    por exemplo echo "String 1", "String 2"

impressão

  • Produz apenas uma única sequência
  • Retorna 1, para que possa ser usado em uma expressão

    por exemplo print "Hello"

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

print_r ()

  • Saídas uma representação legível de qualquer um valor
  • Aceita não apenas strings, mas outros tipos, incluindo matrizes e objetos, formatando-os para serem legíveis
  • Útil ao depurar
  • Pode retornar sua saída como um valor de retorno (em vez de ecoar) se o segundo argumento opcional for fornecido

var_dump ()

  • Produz uma representação legível por humanos de um ou mais valores separados por vírgulas
  • Aceita não apenas strings, mas outros tipos, incluindo matrizes e objetos, formatando-os para serem legíveis
  • Usa um formato de saída diferente para print_r(), por exemplo, também imprime o tipo de valores
  • Útil ao depurar
  • Sem valor de retorno

var_export ()

  • Saídas um legível e PHP-executável representação de qualquer um valor
  • Aceita não apenas strings, mas outros tipos, incluindo matrizes e objetos, formatando-os para serem legíveis
  • Usa um formato de saída diferente para ambos print_r()e var_dump()- a saída resultante é um código PHP válido!
  • Útil ao depurar
  • Pode retornar sua saída como um valor de retorno (em vez de ecoar) se o segundo argumento opcional for fornecido

Notas:

  • Mesmo que printpossa ser usado em uma expressão, recomendo que as pessoas evitem fazê-lo, porque é ruim para a legibilidade do código (e porque é improvável que seja útil). As regras de precedência quando interage com outros operadores também podem ser confusas. Por isso, eu pessoalmente nunca tenho motivos para usá-lo echo.
  • Considerando que echoe printsão construções de linguagem print_r()e var_dump()/ var_export()são funções regulares. Você não precisa de parênteses para colocar os argumentos em echoou print(e, se você os usar, eles serão tratados da mesma maneira que em uma expressão).
  • Embora var_export()retorne um código PHP válido, permitindo que os valores sejam lidos mais tarde, depender desse código de produção pode facilitar a introdução de vulnerabilidades de segurança devido à necessidade de uso eval(). Seria melhor usar um formato como JSON para armazenar e ler valores de volta. A velocidade será comparável.
thomasrutter
fonte
3
Apenas uma observação rápida sobre quando você deseja a echo $a, $b;sintaxe quando pode fazer echo $a . $b;: se $ a ou $ b são realmente grandes seqüências de caracteres, o último usará memória e tempo extras, criando uma versão concatenada separada das seqüências de caracteres na memória antes dela pode iniciar a saída para o navegador.
thomasrutter
Claro que você também pode usar echo $a; echo $b;.
thomasrutter
16

Apenas para adicionar à resposta de John , echodeve ser o único que você usa para imprimir conteúdo na página.

printé um pouco mais lento. var_dump()e print_r()deve ser usado apenas para depuração.

Também vale a pena mencionar que, print_r()e var_dump()por padrão, ecoará, adicione um segundo argumento ao print_r()menos que seja avaliado como true para que ele retorne, por exemplo print_r($array, TRUE).

A diferença entre ecoar e retornar são:

  • eco: imprimirá imediatamente o valor na saída.
  • return: Retornará a saída da função como uma string. Útil para registro, etc.
alex
fonte
Só porque você meio que levantou a questão, qual é a diferença entre echoing e returning?
David diz que restaura Monica
2
wow Eu gostaria de saber sobre o parâmetro de voltar :( basicamente você pode fazer $ foo = print_r ($ array, true); e usá-lo de outras formas (em um log, mesa, etc)
FryGuy
Eu usei print_rbastante o parâmetro de retorno enquanto codificava o PHP. No entanto, eu costumava escrever print_r( $foo, 1 );. É mais rápido digitar;) E sobre isso, não me importo muito com legibilidade, pois também acho o nome print_rnão muito descritivo.
Exhuma
var_dump()não suporta o segundo argumento, permitindo retornar um valor como o print_r()faz, porque var_dump()pode aceitar vários argumentos para a saída.
thomasrutter
@thomasrutter É verdade, não sei por que escrevi isso.
Alex
6
echo

Não tendo tipo de retorno

print

Tem tipo de retorno

print_r()

Saídas como formatadas,

user1899888
fonte
5

A diferença entre eco , impressão , print_r e var_dump é muito simples.

eco

eco não é realmente uma função, mas uma construção de linguagem usada para imprimir a saída. É marginalmente mais rápido que a impressão.

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)

Você também pode usar a instrução echo com ou sem parênteses

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

impressão

Assim como a impressão de construção de eco também é uma construção de linguagem e não uma função real. As diferenças entre eco e impressão são que a impressão aceita apenas um único argumento e a impressão sempre retorna 1. Enquanto o eco não tem valor de retorno. Portanto, a instrução print pode ser usada em expressões.

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)

Assim como o eco , a impressão pode ser usada com ou sem parênteses.

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

print_r

o função print_r () é usada para imprimir informações legíveis por humanos sobre uma variável. Se o argumento for uma matriz, a função print_r () imprimirá suas chaves e elementos (o mesmo para 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

A função var_dump geralmente usada para depuração e imprime as informações (tipo e valor) sobre uma variável / 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
fonte
3

Eco :

É uma declaração não uma função Sem valor de retorno

Não é necessário os parênteses

Não imprimir matriz

Impressão

É função real

Tipo de retorno 1

Necessário Parênteses

Não imprimir matriz

Print_r

Imprimir em formato legível por humanos

String não está entre aspas

Informações não detalhadas da variável, como tipo e todas

var_dump

Todas as informações de despejo da variável, como tipo de elemento e subelemento

Subterrâneo
fonte
2
Existem muitos problemas com esta resposta. nãoprint é uma função real, é uma construção de linguagem como eco. Também pode ser usado como uma declaração. não é uma afirmação nem pode ser usada em uma. que não exigem parênteses, nem qualquer eco ou imprimir usar os parênteses como uma função faria. Você também perdeu uma das principais diferenças - o eco aceita várias cadeias para eco separadas por vírgulas. echoprint
thomasrutter
2
... e você enviou esta resposta quando várias respostas já existiam e continham as informações corretas .
thomasrutter
2

** O Echocan aceita várias expressões enquanto a impressão não pode. A função PHP Print_r () é usada para retornar uma matriz em um formato legível por humanos. É simplesmente escrito como

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

echo: echo é uma construção de linguagem na qual não é necessário usar parênteses com ela e pode receber qualquer número de parâmetros e retornar nulo.

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

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

print: é uma construção de linguagem em que não é necessário usar parênteses, basta pegar um parâmetro e retornar

    1 always.

           int print(param1);

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

prinf: É uma função que leva pelo menos uma string e estilo de formato e retorna o comprimento da string de saída.

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

print_r() é usado para imprimir a matriz em formato legível por humanos.

vaibhav kulkarni
fonte
0

print_r () pode imprimir o valor, mas também se o segundo parâmetro da flag for passado e for TRUE - ele retornará o resultado impresso como string e nada será enviado para a saída padrão. Sobre var_dump. Se o depurador do XDebug estiver instalado, os resultados serão formatados de maneira muito mais legível e compreensível.

Rinat
fonte
-1

ambos são construções de linguagem. o eco retorna nulo e a impressão retorna 1. o eco é considerado um pouco mais rápido que a impressão.

teste
fonte