Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem, galera, nas fuçadas e testes de rotina, me deparei com uma coisa que eu nunca tinha ouvido falar no PHP. Eu não sei como isso se chama, mas sei que isso funcionou.
É o seguinte: Quando vamos acessar um elemento de um array, normalmente fazemos assim:
$s = array(0 => 'a', 1 => 'b', 2 => 'c');
echo $s[0]; // isso imprime 'a'
Ok. Mas, quando utilizei chaves "{ e }", também deu a mesma coisa:
$s = array(0 => 'a', 1 => 'b', 2 => 'c');
echo $s{0}; // imprime 'a'
Eu testei isso no "http://sandbox.onlinephpfunctions.com" com versões antigas, e também obtive o mesmo resultado.
Eu também não sabia que isso funcionava para strings!
$s = 'forum imasters';
echo $s{0}; // imprime 'f'
echo $s[0]; // imprime 'f'
A minha dúvida é:
1. Sim, é comportamento padrão. No link que o hinom passou tem uma pequena nota logo antes do Exemplo #7
2. No link acima
3. Usabilidade? Nenhuma! Serve apenas pra confundir a prra toda. Referenciar usando curly brackets normalmente é voltado quando se deseja obter um determinado caractere de uma string e as square brackets* para arrays
Mas porque alguém acordou de mal com a vida e resolver adicionar essa compatibilidade então tanto faz. Eu acho horrível e confunde muito os novatos (não estou dizendo que você seja novato).
JR, sem querer ofender, mas a única relação da sua resposta com o tópico é o fato dela se referir também aos arrays.
O assunto levantado é sobre obtenção de valores, e não definição de estrutura. Dos recursos novos do PHP 5.4 para arrays, aquele que mais poderia se justificar aqui como resposta seria a dereferenciação:
function doSomething() {
return array( 'um', 'dois', 'tres' );
}
var_dump( doSomething()[1] );
No PHP 5.4 isso produziria [inline]string(4) "dois"[/inline] ao passo que nas versões anteriores seria levantado um Parse error: syntax error, unexpected '[' inBruno,eu encontrei essa "deferenciação" de outra forma no manual e era referente ao php 5.5.x.
$a = ['forum', 'imasters'][0];
echo $a;//imprime forum
$a ='forum imasters'[0];
echo $a;//imprime 'f'
O nome que se dá ao retorno da função "pegando" o índice do array e a operação realizada acima é o mesmo (dereference )?
Sim, o nome é este mesmo, dereferencing.
A possiblidade de se utilizar chaves vem do contexto histórico do PHP e a influência de PERL e ShellScript na construção da sintaxe. É o mesmo motivo pelo qual todas as variáveis devem ser iniciadas com [inline]$[/inline]
Eu comi um "re" na tradução. O certo é dereferência.
Mas é isso mesmo e cara... Isso não quebra um galho, quebra um sequóia inteira :yay:
Esclarecido
array[ ] :seta: square brackets
array{ } :seta: curly brackets
http://php.net/array