Nota:
El que una cadena se haga muy grande no es un problema. PHP no
impone lÃmite práctico alguno sobre el
tamaño de las cadenas, asà que no hay ninguna
razón para preocuparse sobre las cadenas largas.
Nota:
En PHP 3, se generará una advertencia de nivel
E_NOTICE cuando esto ocurra.
Nota:
A diferencia de las otras dos sintaxis, las variables y secuencias de
escape para caracteres especiales no
serán expandidas cuando ocurren al interior de cadenas
entre comillas sencillas.
<?php echo 'esta es una cadena simple';
echo 'También puede tener saltos de línea embebidos en las cadenas de esta forma, ya que es válido';
// Imprime: Arnold dijo una vez: "I'll be back" echo 'Arnold dijo una vez: "I\'ll be back"';
// Imprime: Ha eliminado C:\*.*? echo 'Ha eliminado C:\\*.*?';
// Imprime: Ha eliminado C:\*.*? echo 'Ha eliminado C:\*.*?';
// Imprime: Esto no va a expandirse: \n una nueva linea echo 'Esto no va a expandirse: \n una nueva linea';
// Imprime: Las variables no se $expanden $tampoco echo 'Las variables no se $expanden $tampoco'; ?>
Pero la caracterÃstica más importante de las
cadenas entre comillas dobles es el hecho de que los nombres de
variables serán expandidos. Vea procesamiento de
cadenas para más detalles.
Si esta regla es rota y el identificador de cierre no es
"limpio", entonces no se considera un identificador de cierre y
PHP continuará en busca de uno. Si, en tal caso, no se
encuentra un identificador de cierre apropiado, entonces un
error del analizador sintáctico resultará con el
número de lÃnea apuntando al final del script.
No es permitido usar la sintaxis heredoc al inicializar
miembros de clase. Use otro tipo de sintaxis en su lugar.
Ejemplo 11-3. Ejemplo inválido
<?php class foo { public $bar = <<<EOT bar EOT; } ?>
El texto heredoc se comporta tal como una cadena entre comillas
dobles, sin las comillas dobles. Esto quiere decir que no
necesita escapar tales comillas en sus bloques heredoc, pero aun
puede usar los códigos de escape listados
anteriormente. Las variables son expandidas, aunque debe tenerse
el mismo cuidado cuando se expresen variables complejas al
interior de un segmento heredoc, al igual que con otras cadenas.
Ejemplo 11-4. Ejemplo de uso de una cadena heredoc
<?php $cadena = <<<FIN Ejemplo de una cadena que se extiende por varias líneas usando la sintaxis heredoc. FIN;
/* Un ejemplo mas complejo, con variables. */ class foo { var $foo; var $bar;
echo <<<FIN Mi nombre es "$nombre". Estoy imprimiendo algo de $foo->foo. Ahora, estoy imprimiendo algo de {$foo->bar[1]}. Esto debería imprimir una letra 'A' mayúscula: \x41 FIN; ?>
Cuando una cadena es especificada en comillas dobles o al
interior de un bloque heredoc, las variables son interpretadas
en su interior.
Existen dos tipos de sintaxis: una simple y
una compleja. La
sintaxis simple es la más común y
conveniente. Esta ofrece una forma de interpretar una variable,
un valor array, o una propiedad de un
object.
La sintaxis compleja fue introducida en PHP 4, y puede
reconocerse por las llaves que rodean la expresión.
Si un signo de dólar ($) es
encontrado, el analizador sintáctico tomará
ambiciosamente tantos lexemas como le sea posible para formar
un nombre de variable válido. Rodee el nombre de la
variable de llaves si desea especificar explÃcitamente
el final del nombre.
<?php $cerveza = 'Heineken'; echo "El sabor de varias $cerveza's es excelente"; // funciona, "'" no es un caracter valido para nombres de variables echo "Tomó algunas $cervezas"; // no funciona, 's' es un caracter valido para nombres de variables echo "Tomó algunas ${cerveza}s"; // funciona echo "Tomó algunas {$cerveza}s"; // funciona ?>
De forma similar, puede hacer que un Ãndice de un
array o una propiedad de un object
sean interpretados. En el caso de los Ãndices de
matrices, el corchete cuadrado de cierre (])
marca el final del Ãndice. Para las propiedades de
objetos, se aplican las mismas reglas de las variables simples,
aunque con las propiedades de objetos no existe un truco como
el que existe con las variables.
<?php // Estos ejemplos son especificos al uso de matrices al interior de // cadenas. Cuando se encuentre por fuera de una cadena, siempre rodee // de comillas las claves tipo cadena de su matriz, y no use // {llaves} por fuera de cadenas tampoco.
// Mostremos todos los errores error_reporting(E_ALL);
// Esto esta mal por la misma razon por la que $foo[bar] esta mal por // fuera de una cadena. En otras palabras, aun funciona pero ya que // PHP busca primero una constante llamada foo, genera un error de // nivel E_NOTICE (constante indefinida). echo "Esto esta mal: {$matriz[foo][3]}";
// Funciona. Cuando se usan matrices multi-dimensionales, use siempre // llaves alrededor de las matrices al interior de cadenas echo "Esto funciona: {$matriz['foo'][3]}";
Nota:
Para efectos de compatibilidad con versiones anteriores, aun
puede usar corchetes tipo matriz para el mismo
propósito. Sin embargo, esta sintaxis es obsoleta a
partir de PHP 4.
Ejemplo 11-5. Algunos ejemplos de cadenas
<?php // Obtener el primer caracter de una cadena $cadena = 'Esta es una prueba.'; $primer = $cadena{0};
// Obtener el tercer caracter de una cadena $tercer = $cadena{2};
// Obtener el ultimo caracter de una cadena. $cadena = 'Esta es tambien una prueba.'; $ultimo = $cadena{strlen($cadena)-1};
// Modificar el ultimo caracter de una cadena $cadena = 'Observe el mar'; $cadena{strlen($cadena)-1} = 'l';
Existen bastantes funciones útiles para la
modificación de cadenas.
Vea la sección de funciones de
cadena para consultar funciones de uso general, o las
funciones de expresiones regulares para búsquedas y
reemplazos avanzados (en dos sabores: Perl y POSIX
extendido).
Un valor booleanTRUE es convertido a la cadena
"1", el valor FALSE se representa como
"" (una cadena vacÃa). De esta forma,
usted puede convertir de ida y vuelta entre valores booleanos y
de cadena.
Un número integer o de punto flotante
(float) es convertido a una cadena que representa el
número con sus dÃgitos (incluyendo la parte del
exponente para los números de punto flotante).
Las matrices son siempre convertidas a la cadena
"Array", de modo que no puede volcar los
contenidos de un valor array con
echo() o print() para ver
lo que se encuentra en su interior. Para ver un elemento, usted
tendrÃa que hacer algo como echo
$arr['foo']. Vea más adelante algunos consejos
sobre el volcado/vista del contenido completo.
Los recursos son siempre convertidos a cadenas con la estructura
"Resource id #1" en donde 1
es el número único del valor resource
asignado por PHP durante tiempo de ejecución. Si quisiera
obtener el tipo del recurso, use
get_resource_type().
NULL se convierte siempre a una cadena vacÃa.
Como puede apreciar, el imprimir matrices, objetos o recursos no
le ofroce información útil sobre los valores
mismos. Consulte las funciones print_r() y
var_dump() para conocer mejores formas de
imprimir valores para depuración.
Para más información sobre esta conversión,
vea la página del manual Unix sobre strtod(3).
Si quisiera probar cualquiera de los ejemplos presentados en esta
sección, puede cortar y pegar los ejemplos e insertar la
siguiente lÃnea para verificar por sà mismo lo que
está sucediendo:
<?php echo "\$foo==$foo; tipo es " . gettype ($foo) . "<br />\n"; ?>
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.