php - Por que devemos usar PHP_EOL? - Stack Overflow em Português
Já me informaram que o PHP_EOL define o fim da linha, ok.
Mas por que eu deveria escrever.
echo 'a'.'<br>'.PHP_EOL;
echo 'a'.'<br>';
Traz o mesmo efeito, qual a diferença que faz usar o PHP_EOL
editada 24/10/19 às 11:58
perguntada 22/10/19 às 17:47
37322 medalhas de prata1313 medalhas de bronze
Primeiro é importante você entender que o . é uma coisa e o PHP_EOL é outra. O . é só um operador para concatenar duas strings. No caso, PHP_EOL é uma delas, mais precisamente é uma constante que contém uma string. A string exata que ela contém depende do sistema operacional. Agora (re)leia a resposta do Maniero :) – bfavaretto♦ 22/10/19 às 18:04
Não trás o mesmo efeito, isso só parece igual em HTML, se o content-type: for text/plain BR não será uma tag, será texto e sem o PHP_EOL não haverá quebra de linha, deixando tudo em uma linha só, no entanto PHP_EOL é um pouco desnecessário neste seu exemplo, tanto apostrofos quanto aspas suportam ter quebras de linhas reais dentro e para faciltar você pode usar o heredoc. – Guilherme Nascimento♦ 22/10/19 às 18:23
Mas agora você incluiu o ; do final que também é outra coisa :D – bfavaretto♦ 22/10/19 às 19:19
Quase nunca deve. PHP_EOL não é "fim de linha". É tão somente o "fim da linha do OS em que o PHP está rodando naquele momento". Nem mais,nem menos. Se usar em email está errado, se usar em HTTP está errado, se usar em remessa bancária está errado, e a lista de onde é errado usar é imensa. Só deve usar na minoria de situações em que a quebra seja a mesma do padrão do OS em que o script está rodando. Os exemplos que eu dei (e a grande maioria dos arquivos) tem formato definido por RFC ou documentação específica, e não devem usar quebras que variam de acordo com o ambiente. – Bacco♦ 22/10/19 às 21:23
Um adendo ao comentário do @Bacco só para ter uma noção de como difere, o var_dump(PHP_EOL); em Windows retorna isto \r\n em ambientes unix-like "geralmente" retorna isto \n (claro que não exatamente isto que você vê, isso ai é a representação) e provavelmente se o PHP rodasse em outros sistemas (não sei se roda) existem (existiam?) os que usavam \025, então se teoricamente você usar PHP_EOL para páginas web e o servidor usasse \025 com certeza tudo iria quebrar/falhar. – Guilherme Nascimento♦ 22/10/19 às 21:38
Não é que deve usar, você usa se quiser e precisar. Primeiro, só vai usá-lo se você quer dar um pulo de linha no texto gerado. É o que você quer aí? Sabe por que vai pular linha ali?
Esse pulo de linha tem a ver com o texto gerado, não com o HTML. o <br> nada tem a ver com isso, por acaso nesse código é assim, mas pular linha aí só muda o layout do código e não da página que ele desenhará. Não se esqueça que você está gerando um texto que é um código a ser mandado para um browser. Esse pulo de linha que está falando afetará só esse texto, não o que ele renderizará.
O primeiro código gerará no browser algo assim:
O segundo ficará assim no browser:
a<br>b
Mas na hora que for montar a página e mostrada os dois mostrarão exatamente a mesma coisa (salvo algum bug no browser) porque para renderizar a página o que vale é só o <br>, e não a quebra de linha.
Se realmente quer pular linha pode usar um caractere puro de pular linha ou pode usar esta constante definida que usará o caractere apropriado para pular linha de acordo com o sistema operacional que o seu código está rodando. Mas como estamos falando de um texto gerado para o HTML isso não tem relevância, e na verdade nem faz sentido já que se ele estiver rodando no Linux, por exemplo, e seu HTML gerado for para um browser rodando no Windows, ele gerou uma quebra de linha de um jeito que o Windows não entende corretamente (pode ser que o browser faça alguma coisa para administrar isso).
Para este caso um \n no lugar do PHP_EOL deve funcionar bem. O PHP_EOL faz mais sentido quando vai criar arquivos que precisam ser mostrados em uma plataforma específica mas você não sabe qual será ela ainda. O browser não tem como você controlar, quando você manda o HTML para o cliente via servidor HTTP tem que escolher uma forma, aí costuma ser tarde demais, a não ser que tente detectar que plataforma o browser que fez a requisição está rodando (não é confiável), mas aí tem que fazer o oposto do que o PHP_EOL faz, você teria que controlar isso.
O resumo de tudo isso é que não precisa usar esta constante, não sei o contexto, mas parece que alguém te orientou errado, pelo menos para este contexto.
Parti do princípio que sabe o que é concatenação de string.
Leia os comentários que tem informações relevantes sobre porque isto existe e quando deve ser usado de verdade. É raro ser necessário em PHP e geralmente só quando ele é usado para coisas que não é o normal que as pessoas fazem.
Pode ler mais em Qual a diferença entre carriage return e line feed?.
editada 23/10/19 às 16:13
respondida 22/10/19 às 17:54
Quebra de Linha no Console
Para resolver questões de diferentes sistemas operacionais utilize o PHP_EOL para forçar uma quebra de linha na visualização.
As alternativas abaixo funcionaram de forma idêntica no ambiente Windows, já para outro OS, LF+CR poderiam não ter o mesmo resultado.
echo "Pula linha 1", PHP_EOL;
echo "Pula linha 2" . PHP_EOL;
echo "Pula linha 3" . chr(10) . chr(13);
Obs: chr(10) = LF(line feed), chr(13) = CR (carriage return). Veja em tabela ascii :https://web.fe.up.pt/~ee96100/projecto/Tabela%20ascii.htm