Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MeninoBonito

[Resolvido] Quando usar variável entre chaves.

Recommended Posts

Olá pessoal! Dúvidas sobre variável entre chaves Imagem Postada

 

Quando o interpretador do php está lendo o script e encontra um $ (cifrão) automaticamente se entende que se trata de uma variável e logo ele procura identificadores válidos para um nome seguido do cifrão. Com as chaves delimitando o nome da variável, faz com que o interpretador não fique tentando adivinhar o fim do nome da variável... Isso foi o que entendi a princípio do uso das chaves, se eu estiver errado me corrijam Imagem Postada

 

Gostaria de saber:

 

Quando é indicado utilizar as chaves?

Elas deixam o código mais lento?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entedi bem o termo CHAVE? você quer dizer ARRAYS?

 

Atenciosamente Silverfox.

 

Silverfox beleza? As chaves que eu mencionei eram os literais: (chave de abertura) { (chave de fechamento) }

 

Exemplo:

 

<?php 
   
    $nome = 'Algum nome';

    echo "Essa é minha variável de nome: {$nome}";

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele perguntou algo do tipo

$txt = "string com uma variavel entre {$chaves} blah bla blah";

isso para evitar concatenação e dar visibilidade

 

$txt = 'string com uma variavel entre '.$chaves.' blah bla blah ';

nao sei se tem alguma mudança com relação a performace do codigo creio que nao

Compartilhar este post


Link para o post
Compartilhar em outros sites

A entedi, então ao inves de usar aspas duplas use aspas simples assim será mais facil manipular o PHP com HTML:

Ficaria assim, teste para ver o efeito:

echo 'string com uma variavel entre {'.$chaves.'} ';
echo 'string com uma variavel entre {$chaves} ';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Silverfox não vejo muito sentido em usar a chaves assim:

echo 'string com uma variavel entre {'.$chaves.'} ';
Até porque seu uso não seria para evitar a concatenação? Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Silverfox não vejo muito sentido em usar a chaves assim:

 

 

echo 'string com uma variavel entre {'.$chaves.'} ';
Até porque seu uso não seria para evitar a concatenação? Imagem Postada

 

 

 

Mas é isso que eu quiz dizer, aqui as chaves não tem efeito, com aspas simples ele é só string, entendeu amigo? Imagem Postada

Atenciosamente Silverfox

Compartilhar este post


Link para o post
Compartilhar em outros sites

André D. Molin obrigado pelo link, eu já tinha feito a leitura desse artigo. O fato de estar perguntando aqui é exatamente o que não eu entendi ou o que não contém na integra no php.net.

 

Quando é indicado utilizar as chaves?

Elas deixam o código mais lento?

 

 

Silverfox agradeço a ajuda, mais eu não consegui entender a mensagem que você quis transmitir no seu segundo e terceiro post :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

André D. Molin obrigado pelo link, eu já tinha feito a leitura desse artigo. O fato de estar perguntando aqui é exatamente o que não eu entendi ou o que não contém na integra no php.net.

 

Quando é indicado utilizar as chaves?

Elas deixam o código mais lento?

 

 

Silverfox agradeço a ajuda, mais eu não consegui entender a mensagem que você quis transmitir no seu segundo e terceiro post :ermm:

Realmente fui, pouco claro, queria passar na ideia do meu segundo poste a maneira melhor de se usar variaveis dentro de echo ou print, mas realemente não fui claro, obrigado por se expressar e abrir meus olhos.

 

Bem sobre "quando usar":

http://www.php.net/manual/pt_BR/language.variables.variable.php :

Para poder utilizar variáveis variáveis com arrays, você precisa resolver um problema de ambigüidade. Assim, se você escrever $$a[1] então o interpretador pode entender que você quer usar $a[1] como uma variável ou que você quer usar $$a como uma variável e [1] como o índice dessa variável. A sintaxe para resolver essa ambigüidade é ${$a[1]} para o primeiro caso e ${$a}[1] para o segundo.

Sobre o desempenho não encontrei nada referente. =)

Boa noite amigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem diversas maneiras de se usar uma variável no contexto de uma string:

 

Concatenando:

 

$string = 'Hello, ' . $name . '. This is a cruel world, isn't it?';

Vantagem: Não precisa ficar escapando aspas simples (ou duplas se assim o fizer)

Desvantagem: Uma string simples, às vezes, pode acabar dobrando de tamanho e arrebentar a indentação do seu código o que pode incomdar na leitura ou na estética (é, sou fresco com meu código mesmo Imagem Postada ).

 

Usando aspas duplas:

 

$string = "Hello, $name. This is a cruel world, isn't it?";

Vantagem: A string fica pequena sempre e não a necessidade de se escapar caracteres especiais EXCETO o próprio cifrão, caso queira representar dinheiro.

Desvantagem: Particularmente, acho que o código fica feio. Dependendo do IDE que você usar, a variável não será destacada em meio ao texto, se perdendo e dificultando uma possível manutenção.

 

Usando Chaves:

 

$string = "Hello, {$name}. This is a cruel world, isn't it?";

Vantagem: É como o caso acima, porém, em IDE's de respeito, variáveis entre chaves numa string ficam em outra cor. Assim se você prefere codificar com aspas duplas, sempre achará suas variáveis facilmente.

Desvantagem: As mesmas que o caso acima.

 

Usando printf() e/ou sprintf():

 

$string = sprintf( 'Hello, %s. This is a cruel world, isn't it?', $name );

ou

 

printf( 'Hello, %s. This is a cruel world, isn't it?', $name );

Vantagem:: O código fica muito mais legível. Texto de um lado, variáveis de outro. Facilita a leitura e a manutenção.

Desvantagem: Você precisa saber usar os... modificadores? Se não souber terá problemas OU poderá não usufruir de todo potencial das funções. %s para texto, %d para inteiros e %f para decimais é fácil, já os outros...

 

Porém, a pergunta que não quer calar é "quando e onde usar"? Isso só você pode responder.

 

Além de todos os pontos altos e baixos de cada jeito tem o gosto pessoal do programador que deve sempre pensar que, um dia, terá de fazer a manutenção do sistema, seja para corrigir algo com nug ou para implementar algo novo.

 

Todo e qualquer "10 minutos" ganho na codificação de algo, é um extra.

 

Porééééémmmm.....

 

Cada jeito de se exibir uma string leva um determinado tempo de processamento e, dependendo da magnitude de um projeto cada milissegundo é ou pode ser crucial. Então resta você fazer o teste e ver qual o meio mais rápido.

 

Assim, de cabeça, se me lembro bem, usando printf() e/ou sprintf() é mais lento do que qualquer outro meio. E, sem usá-las, concatenando também peca em performance.

 

Espero que isso lhe ajude.

 

Bons códigos :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desvantagem: Você precisa saber usar os... modificadores?

Placeholders, ou em bom portugês(br): Guarda-lugar.

 

'd'	Signed integer decimal.	 
'i'	Signed integer decimal.	 
'o'	Signed octal value.
'x'	Signed hexadecimal
'e'	Floating point exponential format
'f'	Floating point decimal format.
'g'	Floating point format. Uses lowercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise.
'c'	Single character (accepts integer or single character string).
'r'	String.
's'	String.
'%'	No argument is converted, results in a '%' character in the result.

Quanto à performance: Resumindo. Aspas simples, mais rápido.

 

(s)printf, mais lento.

 

Aspas duplas, encapsulando as variáveis com chaves, mais rápido e seguro (explicarei porque). Sem chaves, só ganha de (s)printf.

 

Explicando a segurança das chaves:

 

$veiculo = 'carro';
echo "tenho dois $veiculos.";

 

PHP procura por $veiculos, não encontra. Com Level de erros [E_WARN] ligado, gera um aviso.

 

Minha preferência:

Strings lineares, aspas duplas encapsuladas com {chaves}.

Strings multilinha: HEREDOC.

 

Perfeito para escrver blocos HTML/XML/SQL ou outros L da vida.

 

$output = <<<HTML
<table>
   <thead>
       <tr>
           <th>Nome</th>
           <th>Idade</th>
       </tr>
   </thead>
   <tbody>
       <tr>
           <td>Evandro</td>
           <td>21</td>
       </tr>
   </tbody>
</table>
<p>Exemplo de uso de {$variavel} dentro de HEREDOC</p>
HTML;

echo $output;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Placeholders, ou em bom portugês(br): Guarda-lugar.

Copiado Imagem Postada

 

Eu já prefiro, na maioria das vezes (s)printf(). Acho mais organizado. Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda de todos. As opiniões foram muito importantes e fizeram com que minha dúvida fosse sanada. Valeu pessoal!! Imagem Postada

 

Detalhe: Achei muito interessante a dica do Evandro sobre o HEREDOC. Passarei a usar as chaves principalmente nas propriedades da classe quando usadas no contexto de string, pois aparenta ser uma solução segura tanto como o (s)printf...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.