Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/06/2006, 19:12
okram
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por http://www.php-hispano.net/

Comillas simples y comillas dobles


Entramos en el apasionante mundo de las comillas, que nos perseguirá durante la concatenación de cadenas y por supuesto, durante el viaje a través de las comillas automágicas (magic_quotes) que nos pueden dar más de un quebradero de cabeza.

Dos aspectos básicos a modo de resumen:
  • Las comillas simples muestran el contenido tal y como lo hemos escrito.
  • Las comillas dobles parsean nuestra cadena en busca de posibles variables a interpretar por PHP.
Consecuencias inmediatas:
las comillas simples son más rápidas que las dobles porque no pierden el tiempo interpretando el contenido.

Algunos ejemplos:

<?
echo 'Esto es una cadena normal y corriente, tardo poco porque no me parseo';
echo
"Aquí PHP mira a ver si tengo algo dentro que pueda interpretar, tardo un poco más";
?>




<?
$var
="php-hispano.net";
echo
'Me encanta $var'; // muestra: Me encanta $var
echo "Me encanta $var"; // muestra: Me encanta php-hispano.net
?>


Ventajas y desventajas del uso de ambos tipos de comillas:

<?
$var
="http://www.php-hispano.net";

//No necesito escapar las dobles comillas aquí
echo '<input type="text" name="campo">';

//Sin embargo me veo obligado a concatenar $var, para que se sustituya por su valor
echo '<a class="link" href="'.$var.'">php para torpes</a>';


//Con comillas dobles, $var se sustituirá por su contenido sin concatenar, pero necesito escapar las dobles comillas
echo "<a class=\"link\" href=\"$var\">php para torpes</a>";

//Aunque esto parece que sigue siendo más rápido
echo "<a class=\"link\" href=\"".$var."\">php para torpes</a>";

?>


Ojo a lo siguiente:

<?
echo 'Hola mundo\n' // muestra : Hola mundo\n (No hace el salto de línea!!)
?>


Esto no puede parecer determinante cuando hacemos un echo, pero cuando estamos tratando una cadena para su uso posterior nos puede dar algún problema. Es por eso que los strings suelen ir entre dobles comillas:

<?
$string
="Hola mundo\n"; //Contiene el salto de línea esperado.
$var="php-hispano.net";
$string="Ven a $var\n"; // Produce "Ven a php-hispano.net" y hace un salto de linea
?>


Dentro de las dobles comillas es posible que necesites escapar caracteres, como el carácter de $, las dobles comillas o el backslash. Las comillas simples no necesitan ser escapadas, al igual que las dobles no lo necesitaban dentro de las simples.

<?
$var
="php-hispano.net";
$nombre="valor";
echo
"$var tiene una variable llamada \$nombre";
// mostrará php-hispano.net tiene una variable llamada $nombre
// Nótese que equivale a: echo $var.' tiene una variable llamada $nombre';

echo "$var tiene una variable llamada $nombre"; // producirá obviamente: php-hispano tiene una variable llamada valor

// Un caso especial:
echo "$var tiene una variable llamada '$nombre'"; // Producirá: php-hispano.net tienen una variable llamada 'valor'
// A pesar de que $nombre esté entre comillas simples, se parsea y se sustituye por su valor
// ya que la cadena entera está a su vez metida en comillas dobles
// Esto tiene una aplicacion directa en los querys mySQL

// Las dos siguientes expresiones son equivalentes, usamos \ para escapar la propia barra invertida.
echo "Hola mundo\\n";
echo
'Hola mundo\n';
?>


Dos sutilezas que he aprendido mientras escribía esta FAQ. Si necesitas poner una cantidad en dólares dentro de unas dobles comillas:
echo "Tengo $1000";
No hace falta escapar nada, mostrará "Tengo $1000" debido a que un nombre de variable en PHP no puede comenzar por un número.

Si sólo necesitas escapar el símbolo $, sin nada que lo acompañe puedes usar:

echo "Este es el símbolo $$"; que mostrará: "Este es el símbolo $"

Sin embargo:

<?
$nombre
="valor";
$valor="12345";
echo
"La variable $$nombre vale $valor"; // Produce: "La variable $valor vale 12345";
?>