Ir para conteúdo

Arquivado

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

Wallace Maxters

Desde quando o php acessa elementos do array assim?

Recommended Posts

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 é:
- As versões anteriores do PHP sempre aceitou isso (o php que estou usando no Xampp é o 5.5.6)?
- Onde posso encontrar algo tratando sobre o assunto? (não achei, porque não conheço nenhum termo a que possa ser referido essa "operação");

- Qual seria a usabilidade disso?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 p*rra 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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 '[' in

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno,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 )?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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]

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

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.