variable una recorrer extraer escapar dividir dentro comillas caracteres caracter cadena buscar php

una - Mejores prácticas: ¿trabajar con cadenas largas y multilínea en PHP?



recorrer string php (9)

pero ¿cuál es el problema con las nuevas líneas y los retornos de carro? ¿Cual es la diferencia? ¿Es / n / n el equivalente de / r / r o / n / r? ¿Qué debería usar cuando estoy creando un espacio de línea entre líneas?

Nadie aquí pareció responder realmente esta pregunta, así que aquí estoy.

/r representa ''retorno de carro''

/n representa ''line-feed''

La razón real para ellos se remonta a las máquinas de escribir. A medida que escribe, el "carro" se desliza lentamente, carácter por carácter, a la izquierda de la máquina de escribir. Cuando llegue al final de la línea, devolverá el carro y luego irá a una nueva línea . Para ir a la nueva línea, debe girar una palanca que alimenta las líneas al escritor de tipos. Por lo tanto, estas acciones, combinadas, se llamaban alimentación 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.

Entonces /n/n realmente no tiene sentido, ni tampoco /r/r . /n/r creo, pero /r/n es más común. Ahora, pasemos a las computadoras. Las computadoras originales tomaron /r y /n literalmente.

De esta forma podrías escribir sobre personajes que ya fueron escritos. EG Hello/rWorld se vería realmente extraño . Hello/nWorld por otro lado también se vería un poco extraño ...

Sin embargo, en estos días, el soporte para el retorno de carro es escaso. Por lo general, en cada sistema puede salirse con la suya /n por sí mismo. Nunca depende del sistema operativo, pero depende de lo que está viendo la salida.

¡Aun así, siempre recomendaría usar /r/n siempre que sea posible!

Nota: lo siento si esta es una pregunta extremadamente simple, pero estoy un tanto obsesivo compulsivo sobre el formato de mi código.

Tengo una clase que tiene una función que devuelve una cadena que conformará el texto del cuerpo de un correo electrónico. Quiero que este texto se formatee para que se vea bien en el correo electrónico, pero también para que mi código no tenga un aspecto funky. 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 problema con las nuevas líneas y los retornos de carro? ¿Cual es la diferencia? ¿Es /n/n el equivalente de /r/r o /n/r ? ¿Qué debería usar cuando estoy creando un espacio de línea entre líneas?

Luego está la opción de buffering de salida y sintaxis heredoc.

¿Cómo manejas el uso de cadenas largas multilínea en tus objetos?


Agregar /n y / o /r en medio de la cadena, y tener una línea de código muy larga, como en el segundo ejemplo, no se siente bien: cuando lee el código, no ve el resultado, y tienes que desplazarte

En este tipo de situaciones, siempre uso Heredoc (o Nowdoc, si utilizo PHP> = 5.3) : fácil de escribir, fácil de leer, sin necesidad de líneas súper largas, ...

Por ejemplo :

$var = ''World''; $str = <<<MARKER this is a very long string that doesn''t require horizontal scrolling, and interpolates variables : Hello, $var! MARKER;

Solo una cosa: el marcador final (y el '' ; '' después) debe ser lo único en su línea: ¡no hay espacio / pestaña antes o después!


Claro, podrías usar HEREDOC, pero en lo que respecta a la legibilidad del código, no es mucho mejor que el primer ejemplo, envolviendo la cadena en múltiples líneas.

Si realmente quieres que tu cadena de varias líneas se vea bien y fluya bien con tu código, te recomiendo encadenar las cuerdas de la siguiente manera:

$text = "Hello, {$vars->name},/r/n/r/n" . "The second line starts two lines below./r/n" . ".. Third line... etc";

Esto podría ser un poco más lento que HEREDOC o una cadena de múltiples líneas, pero fluirá bien con la sangría de su código y lo hará más fácil de leer.


Debe usar HEREDOC o NOWDOC.

$var = "some text"; $text = <<<EOT Place your text between the EOT. It''s the delimiter that ends the text of your multiline string. $var EOT;

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.

$var = "foo"; $text = <<<''EOT'' My $var EOT;

En este caso, $ text tendrá el valor My $var .

Nota: antes del EOT; cierre EOT; no debe haber espacios ni pestañas. de lo contrario, recibirá un error


El que cree eso

"abc/n" . "def/n"

La cadena multilínea es incorrecta. Eso es dos cadenas con operador de concatenación, no una cadena multilínea. Tales cadenas concatenadas no se pueden usar como claves de matrices predefinidas, por ejemplo. Desafortunadamente php no ofrece cadenas multilíneas reales en forma de

"abc/n" "def/n"

solo la sintaxis HEREDOC y NOWDOC , que es más adecuada para las plantillas, porque la sintaxis del código anidado se rompe con dicha sintaxis.


En lo que respecta a su pregunta sobre las nuevas líneas y los retornos de carro:

Yo recomendaría usar la constante global predefinida PHP_EOL, ya que resolverá cualquier problema de compatibilidad multiplataforma.

Esta pregunta se ha planteado en SO de antemano y puede encontrar más información leyendo "¿ Cuándo uso la constante PHP PHP_EOL "?


Me gusta este método un poco más para Javascript, pero parece que vale la pena incluirlo aquí porque aún no se ha mencionado.

$var = "pizza"; $text = implode(" ", [ "I love me some", "really large", $var, "pies.", ]); // "I love me some really large pizza pies."

Para cosas más pequeñas, me parece que a menudo es más fácil trabajar con estructuras de matriz en comparación con cadenas concatenadas.

Relacionado: implode vs concat performance


Utilizo un sistema similar a pix0r y creo que hace que el código sea bastante legible. A veces, incluso llegaba a separar los saltos de línea entre comillas dobles y usaba comillas simples para el resto de la cadena. De esta 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 la cadena de comillas dobles. Así que podría hacer algo como esto con tu ejemplo original:

$text = ''Hello '' . $vars->name . '','' . "/r/n/r/n" . ''The second line starts two lines below.'' . "/r/n/r/n" . ''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;

En cuanto a los saltos de línea, con el correo electrónico siempre debe usar / r / n. PHP_EOL es para archivos que están destinados a ser utilizados en el mismo sistema operativo que php se está ejecutando.


Yo uso plantillas para texto largo:

email-template.txt contiene

hello {name}! how are you?

En PHP hago esto:

$email = file_get_contents(''email-template.txt''); $email = str_replace(''{name},'', ''Simon'', $email);