2011-11-11 1 views
25

avevo appena incontrato un po 'molto strano di codice PHP:PHP parentesi graffe in serie notazione

$oink{'pig'} = 1; 
var_dump($oink); 

$oink{'pig'} = '123123'; 
echo $oink{'pig'}; /* => 123123 */ 
echo $oink['pig']; /* => 123123 */ 

Funziona come un array, ma mai scritto nel manuale. Cos'è questo?

+0

vedere anche http://stackoverflow.com/q/335205/632951 – Pacerier

+0

@Jauzsika, se mai torni, vi prego di accettare [risposta di Pacerier] (https://stackoverflow.com/a/26809707/283366) poiché è di qualità molto migliore. – Phil

risposta

1

È menzionato nel manuale, ma è oscura:

http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

In poche parole, le parentesi graffe accesso solo un singolo carattere (tenta di aggiungere una stringa completa e vedrete che restituisce solo il primo personaggio). È anche deprecato, quindi eviterei il suo uso.

+3

Non vero. Guarda il mio esempio – Jauzsika

+1

L'accesso a una stringa come una matrice produce un carattere. Anche lì, è possibile utilizzare parentesi graffe e parentesi graffe in modo intercambiabile. –

4

Secondo questo commento sulla documentazione, è solo un altro notazione, probabilmente progettato per assomigliare la sintassi Perl: http://www.php.net/manual/de/language.types.array.php#99015

Aggiornamento: Quando questa risposta è stata originariamente pubblicato, il manuale di PHP non ha avuto alcun ufficiale informazioni su questa notazione. Entro il 2014, tuttavia, il commento di cui sopra era stato rimosso e, come Pacerier's answer says, la notazione è stata menzionata ufficialmente nel manuale.

26

E è menzionato nel manuale. {} è solo una sintassi alternativa per []§:

Sia parentesi quadre e graffe possono essere usati in modo intercambiabile per accedere agli elementi di matrice (ad esempio $array[42] e $array{42} saranno entrambi fare la stessa cosa nell'esempio precedente).

Lo stesso vale corde §:

caratteri all'interno stringhe possono accedere e modificare specificando la base zero offset del carattere desiderato dopo la stringa utilizzando le parentesi matrice quadrata, come in $str[42]. Pensa a una stringa come a una matrice di caratteri per questo scopo. [...]

Nota: Le stringhe possono anche essere raggiunto utilizzando parentesi graffe, come in $str{42}, per lo stesso scopo.

+8

Un anno fa, ma solo per notare che è possibile fare $ array [] per spingere, ma non si può fare $ array {} – Vertig0

+3

@ Vertig0, Yepp, l'intercambiabile è "per accedere agli elementi dell'array". – Pacerier

Problemi correlati