Nota: Lo siento si esta es una pregunta extremadamente simple, pero soy algo obsesivo compulsivo con el formato de mi código.
Tengo una clase que tiene una función que devuelve una cadena que formará el texto del cuerpo de un correo electrónico. Quiero que este texto esté formateado para que se vea bien en el correo electrónico, pero también para que no haga que mi código se vea raro. Esto es lo que quiero decir:
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;
}
}
pero también podría escribirse 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;
}
¿Pero cuál es el trato con las nuevas líneas y retornos de carro? ¿Cual es la diferencia? ¿Es \n\n
el equivalente de \r\r
o \n\r
? ¿Qué debo usar cuando estoy creando un espacio entre líneas?
Luego está la opción de almacenamiento en búfer de salida y sintaxis heredoc.
¿Cómo manejas el uso de largas cadenas multilínea en tus objetos?
Respuestas:
Debe usar HEREDOC u NOWDOC.
La diferencia entre Heredoc y Nowdoc es que el código PHP incrustado en un heredoc se ejecuta, mientras que el código PHP en Nowdoc se imprimirá tal cual.
En este caso, $ text tendrá el valor
My $var
.Nota: antes del cierre
EOT;
no debe haber espacios ni pestañas. de lo contrario, recibirá un errorfuente
EOT;
sin espacios antes.EOT;
no debe haber espacios ni pestañas. de lo contrario, recibirá un error.Utilizo un sistema similar a pix0r y creo que eso hace que el código sea bastante legible. A veces, iría tan lejos como para separar los saltos de línea entre comillas dobles y usar comillas simples para el resto de la cadena. De esa manera, se destacan del resto del texto y las variables también se destacan mejor si utiliza la concatenación en lugar de inyectarlas dentro de una cadena entre comillas dobles. Entonces, podría hacer algo como esto con su ejemplo original:
Con respecto a los saltos de línea, con el correo electrónico siempre debe usar \ r \ n. PHP_EOL es para archivos destinados a ser utilizados en el mismo sistema operativo en el que se ejecuta php.
fuente
Yo uso plantillas para texto largo:
email-template.txt contiene
En PHP hago esto:
fuente
Agregar
\n
y / o\r
en el medio de la cadena y tener una línea de código muy larga, como en el segundo ejemplo, no se siente bien: cuando lees el código, no ves el resultado y tienes que desplazarte .En este tipo de situaciones, siempre uso Heredoc (o Nowdoc, si uso PHP> = 5.3) : fácil de escribir, fácil de leer, sin necesidad de líneas súper largas, ...
Por ejemplo :
Solo una cosa: el marcador final (y el '
;
' después de él) debe ser lo único en su línea: ¡sin espacio / tabulación antes o después!fuente
Claro, podría usar HEREDOC, pero en lo que respecta a la legibilidad del código, en realidad no es mejor que el primer ejemplo, envolviendo la cadena en varias líneas.
Si realmente desea que su cadena de varias líneas se vea bien y fluya bien con su código, le recomiendo concatenar cadenas como tales:
Esto puede ser un poco más lento que HEREDOC o una cadena de varias líneas, pero fluirá bien con la sangría de su código y hará que sea más fácil de leer.
fuente
Este método me gusta un poco más para Javascript, pero parece que vale la pena incluirlo aquí porque aún no se ha mencionado.
Para cosas más pequeñas, creo que a menudo es más fácil trabajar con estructuras de matriz en comparación con cadenas concatenadas.
Relacionado: rendimiento implode vs concat
fuente
El que cree que
La cadena multilínea está mal. Son dos cadenas con operador de concatenación, no una cadena multilínea. Tales cadenas concatenadas no pueden usarse como claves de matrices predefinidas, por ejemplo. Lamentablemente, php no ofrece cadenas multilíneas reales en forma de
only
HEREDOC
yNOWDOC
sintaxis, que es más adecuada para plantillas, porque dicha sangría de código anidado se rompe por dicha sintaxis.fuente
también puedes usar:
fuente
En lo que respecta a su pregunta sobre líneas nuevas y retornos de carro:
Recomendaría usar la constante global predefinida PHP_EOL ya que resolverá cualquier problema de compatibilidad multiplataforma.
Esta pregunta se ha planteado de antemano en SO y puede obtener más información leyendo "¿ Cuándo uso la constante PHP PHP_EOL? "
fuente
Nadie parecía responder realmente esta pregunta, así que aquí estoy.
\r
representa 'retorno de carro'\n
representa 'avance de línea'La razón real de ellos se remonta a las máquinas de escribir. A medida que escribía, el 'carro' se deslizaría lentamente, carácter por carácter, a la derecha de la máquina de escribir. Cuando llegaste al final de la línea, devolverías el carro y luego irías a una nueva línea . Para ir a la nueva línea, debe mover una palanca que alimenta las líneas al escritor de tipos. Por lo tanto, estas acciones, combinadas, se denominaron salto de línea de retorno de carro . Así que literalmente:
Un avance de línea
\n
, significa pasar a la siguiente línea.Un retorno de carro
\r
, significa mover el cursor al comienzo de la línea.En última instancia,
Hello\n\nWorld
debería dar como resultado el siguiente resultado en la pantalla:Donde como
Hello\r\rWorld
debería resultar en la siguiente salida .Es solo cuando se combinan los 2 caracteres
\r\n
que se tiene una comprensión común de la línea conocida. IEHello\r\nWorld
debería resultar en:Y, por supuesto,
\n\r
daría como resultado la misma salida visual que\r\n
.Originalmente las computadoras tomaron
\r
y\n
literalmente. Sin embargo, en estos días el soporte para el retorno de carro es escaso. Por lo general, en todos los sistemas puede salirse con la\n
suya. Nunca depende del sistema operativo, pero sí depende de en qué esté viendo la salida.Aún así, siempre recomendaría usar
\r\n
donde sea que puedas.fuente