PHP: Aspas simples vs Apas duplas

Posted: 4th janeiro 2012 by Ricardo in Desenvolvimento, PHP
Tags: , , , ,

Vejo por aí muitos código, de diversos programadores, alguns mais experientes, outros nem tanto. Indiferentemente disto continuo vendo algumas coisas que realmente me deixam intrigado, como é o caso da aspas. E é sobre isto que gostaria de falar um pouco neste post.

Voltando lá para o nosso amigo C, nós tinhamos uma distição bastante clara do uso de aspas, onde usavamos aspas simples para chars e aspas duplas para strings. Pois bem, isso nunca foi realmente um problema e, na verdade, até facilitava a vida.

Já no PHP, nós não temos esta distinção, aspas são aspas, sendo simples ou duplas o resultado será o mesmo.

Calma, não é bem assim. Veja bem, no PHP nós não precisamos criar uma variável e dizer que ela será eternamente de um tipo, podemos a qualquer momento transforma-la em inteiro, char, string, objeto, conforme a nossa vontade e necessidade, simplesmente atribuíndo a ela um novo valor. Mas não é sobre isto que eu quero falar, não agora.

Uma das distições que o PHP faz entre as aspas simples e duplas é, principalmente, na forma que ‘adicionamos’ uma informação contida em uma variável ou retorno de uma função a uma string. É, acho que isto pode não ter ficado claro, permita-me exemplificar.

$string1 = 'Esta é uma string declarada com aspas simples';
$string2 = “Esta é uma string declarada com aspas duplas”;

Olhando assim, você pode até dizer que as duas strings são iguais, mas para o interpretador PHP, na verdade não são. Na $string1 o PHP entende que como ele está usando aspas simples, o valor compreendido entre elas, não possuí nenhuma variável ou função, logo, ele pode executa-lo sem a necessidade de ‘interpretar’ estes valores primeiro; Quanto usamos aspas duplas, como na $string2, o PHP entende que pode existir variáveis ou funções dentro da string e que antes de imprimir este valor ele precisa interpreta-las.

“Mas na $string2 não há nenhuma variável ou função.”

Verdade, mas apenas nós sabemos disto, o PHP não. Ele só vai saber depois, mas daí ele já perdeu tempo e processamento para verificar isto.

Então, se não há variável dentro da string, não use aspas duplas. E ainda assim, é preferível utilizar concatenação, usando aspas simples, como na $string2 do exemplo abaixo.

$string1 = “Olá, $nome. Seja bem vindo(a)!”;
$string2 = 'Olá, '. $nome .'. Seja bem vindo(a)!';

Existem outros casos onde você não deve usar aspas duplas e onde você deve usar, vou fazer uma lista.

Eu não devo utilizar aspas duplas…

  1. Nos valores de uma array:
    $array = array('laranja', 'pera', 'banana', 'uva');
  2. No index de uma array:
    $array = array('nome' => 'josé', 'sexo' => 'M');
    echo $array['nome'];
  3. Em qualquer lugar onde não seja necessário incluír um valor através de uma variável ou função:
    new throw Exception('Executou um erro');
    exit('Fim da aplicação.');
    str_replace('uva', 'pera', 'José gosta de uva.');

Onde eu devo utilizar aspas duplas…

  1. Onde não há possibilidade de concatenar valores com apas simples.
  2. Onde há necessidade de usar sequenciais de escape, normalmente acontece muito em scripts CLI.

Bom, acho que é isto aí. É bom pensar duas vezes antes de usar aspas duplas, afinal, pode parecer um detalhe bobo, mas realmente faz diferença.

  • Trambulhao
    Algo que me deixa irritado, também.

    Já agora, costumo dar preferência a vírgula em vez do ponto para unir strings e variáveis numa saída do construtor echo.

    echo ‘string ‘, $var, ‘ string’; // + rápido
    echo ‘string ‘ . $var . ‘ string’;

    • http://www.luders.com.br Ricardo
      No caso do echo, é recomendado realmente utilizar a concatenação com , (vírgula) no lugar do . (ponto). Principalmente para melhorar o desempenho.

      As pessoas esquecem que o echo é uma função do PHP que recebe múltiplos parâmetros, por isso acabam usando o . (ponto) ao invés da , (vírgula).

      Muito bem lembrado e uma excelente dica de desempenho.