Prima di tutto, 0x0
è solo un normale 0
in esadecimali che viene gettato a stringa '0
'quando viene utilizzato con la sintassi variabile variabile:
var_dump(0x0===0); // prints "bool(true)"
${0x0} = 'test';
echo ${0x0}; // prints "test"
echo ${'0'}; // prints "test" as well
var_dump(get_defined_vars()); // contains ["0"] => string(4) "test"
siete sulla strada giusta del siero di latte si dice che esso isn' t a :
I nomi di variabili seguono le stesse regole delle altre etichette in PHP. Un nome di variabile valido inizia con una lettera o underscore, seguito da qualsiasi numero di lettere, numeri o caratteri di sottolineatura.Come un'espressione regolare, sarebbe espresso così: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'
Questo è il motivo per cui $0foo = 'Test';
attiva un errore di analisi.
alcuni test rapido con la variable variables syntax rivela che, di fatto, PHP non sembra davvero cura i nomi delle variabili nella misura in cui sono stringhe:
${'123 abc xyz '} = 'Test';
echo ${'123 abc xyz '}; // Test
echo ${'123 abc xyz '}; // PHP Notice: Undefined variable: 123 abc xyz in ...
var_dump(get_defined_vars()); // ["123 abc xyz "] => string(4) "Test"
è che si impone mia ipotesi il suddetto limite di denominazione dal parser del codice sorgente piuttosto che dal core della lingua. Ha bisogno di tali regole per distinguere le variabili quando si analizza il codice PHP. Internamente, il motore Zend che alimenta PHP handles variables come una mappa di hash:
variabili PHP, in generale, sono costituiti da due cose: L'etichetta, che potrebbe, per esempio, essere una voce in una tabella dei simboli, e il contenitore variabile attuale .
Quindi, fino a quando riceve una stringa valida per l'etichetta, è felice.
possiamo usare {} per creare un nome di variabile in 'PHP'. –
0x0 è un NULL ASCII quando chr'd alla stringa; ed è effettivamente usato per prefissare internamente i nomi delle proprietà di classe (qualcosa di cui i tuoi script non sono realmente a conoscenza); quindi tecnicamente non documentato valido perché è usato per uno scopo speciale –
@MarkBaker - Penso che non ci sia 'chr()' qui, solo regolare '(stringa)'. –