Nota: desculpe-me se esta é uma pergunta extremamente simples, mas sou um pouco obsessiva e compulsiva com a formatação do meu código.
Eu tenho uma classe que tem uma função que retorna uma string que compõe o texto do corpo de um email. Quero que este texto seja formatado para que pareça correto no e-mail, mas também para que meu código não pareça estranho. Aqui está o que eu quero dizer:
class Something
{
public function getEmailText($vars)
{
$text = 'Hello ' . $vars->name . ",
The second line starts two lines below.
I also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
}
mas também pode ser escrito como:
public function getEmailText($vars)
{
$text = "Hello {$vars->name},\n\rThe second line starts two lines below.\n\rI also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
mas qual é o problema com novas linhas e devoluções? Qual é a diferença? É \n\n
o equivalente a \r\r
ou \n\r
? O que devo usar ao criar um espaço entre as linhas?
Depois, há a opção de buffer de saída e sintaxe heredoc.
Como você lida com o uso de longas cadeias de linhas múltiplas em seus objetos?
Respostas:
Você deve usar HEREDOC ou NOWDOC.
A diferença entre o Heredoc e o Nowdoc é que o código PHP incorporado em um heredoc é executado, enquanto o código PHP no Nowdoc será impresso como está.
Nesse caso, $ text terá o valor
My $var
.Nota: antes do fechamento,
EOT;
não deve haver espaços ou tabulações. caso contrário, você receberá um errofonte
EOT;
sem espaços antes dele.EOT;
não deve haver espaços ou tabulações. caso contrário, você receberá um erro.Eu uso um sistema semelhante ao pix0r e acho que torna o código bastante legível. Às vezes, eu chegava a separar as quebras de linha entre aspas duplas e usava aspas simples para o restante da string. Dessa forma, elas se destacam do restante do texto e as variáveis também se destacam melhor se você usar a concatenação em vez de injetá-las dentro de uma string com aspas duplas. Então, eu poderia fazer algo assim com o seu exemplo original:
Em relação às quebras de linha, no email você deve sempre usar \ r \ n. PHP_EOL é para arquivos que devem ser usados no mesmo sistema operacional em que o php está sendo executado.
fonte
Eu uso modelos para texto longo:
email-template.txt contém
No PHP eu faço isso:
fonte
Adicionar
\n
e / ou\r
no meio da string e ter uma linha muito longa de código, como no segundo exemplo, não parece certo: quando você lê o código, não vê o resultado e precisa rolar .Nesse tipo de situação, eu sempre uso o Heredoc (ou Nowdoc, se estiver usando PHP> = 5.3) : fácil de escrever, fácil de ler, sem necessidade de linhas muito longas, ...
Por exemplo :
Apenas uma coisa: o marcador final (e o '
;
' depois dele) deve ser a única coisa na sua linha: sem espaço / tabulação antes ou depois!fonte
Claro, você poderia usar o HEREDOC, mas, no que diz respeito à legibilidade do código, não é realmente melhor que o primeiro exemplo, envolvendo a cadeia de caracteres em várias linhas.
Se você realmente deseja que sua string de várias linhas tenha uma boa aparência e flua bem com seu código, eu recomendo concatenar as strings juntas da seguinte forma:
Isso pode ser um pouco mais lento que o HEREDOC ou uma sequência de várias linhas, mas fluirá bem com a indentação do seu código e facilitará a leitura.
fonte
Eu gosto desse método um pouco mais para Javascript, mas parece valer a pena incluir aqui, porque ainda não foi mencionado.
Para coisas menores, acho que geralmente é mais fácil trabalhar com estruturas de matriz em comparação com seqüências de caracteres concatenadas.
Palavras-chave : implode vs concat performance
fonte
Quem acredita que
está seqüência de linhas múltiplas está incorreta. São duas cadeias com operador de concatenação, não uma cadeia de linhas múltiplas. Tais seqüências de caracteres concatenadas não podem ser usadas como chaves de matrizes predefinidas, por exemplo. Infelizmente, o php não oferece cadeias multilinhas reais na forma de
only
HEREDOC
eNOWDOC
sintaxe, que é mais adequado para modelos, porque o recuo do código aninhado é quebrado por essa sintaxe.fonte
você também pode usar:
fonte
Em relação à sua pergunta sobre novas linhas e devoluções:
Eu recomendaria o uso da constante global predefinida PHP_EOL , pois resolverá quaisquer problemas de compatibilidade entre plataformas.
Esta questão foi levantada anteriormente no SO e você pode descobrir mais informações lendo " Quando eu uso a constante PHP PHP_EOL "
fonte
Ninguém aqui parecia realmente responder a essa pergunta, então aqui estou eu.
\r
representa 'retorno de carro'\n
representa 'feed de linha'O motivo real deles remonta às máquinas de escrever. À medida que você digitava, o 'carro' deslizava lentamente, caractere por caractere, à direita da máquina de escrever. Quando você chegava ao final da linha, retornava a carruagem e depois passava para uma nova linha . Para ir para a nova linha, você giraria uma alavanca que alimentava as linhas ao redator de texto. Assim, essas ações, combinadas, foram chamadas de avanço de linha de retorno de carro . Tão literalmente:
Um avanço de linha
\n
, significa mover para a próxima linha.Um retorno de carro
\r
, significa mover o cursor para o início da linha.Por fim,
Hello\n\nWorld
deve resultar na seguinte saída na tela:Onde como
Hello\r\rWorld
deve resultar na seguinte saída .É somente ao combinar os dois caracteres
\r\n
que você tem o entendimento comum da linha conhecida. O IEHello\r\nWorld
deve resultar em:E, é claro
\n\r
, resultaria na mesma saída visual que\r\n
.Originalmente, os computadores pegaram
\r
e\n
literalmente. No entanto, atualmente, o suporte para retorno de carro é escasso. Normalmente, em todos os sistemas, você pode usar\n
sozinho. Nunca depende do sistema operacional, mas depende do que você está vendo na saída.Ainda assim, eu sempre aconselho usar
\r\n
sempre que puder!fonte