Tout d'abord, 0x0
est juste un 0
en représentation hexadécimale qui est rejeté à la chaîne '0
"quand il est utilisé avec la variable variable syntaxe:
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"
Vous avez raison de lactosérum vous dire que ce n'est pas un nom de variable valide:
Les noms de variables suivent les mêmes règles que les autres labels en PHP. Valide
nom de la variable commence par une lettre ou un trait de soulignement, suivie par tous les
nombre de lettres, de chiffres, ou des traits de soulignement. Comme une expression régulière,
il serait exprimé ainsi: '([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
C'est la raison pour laquelle $0foo = 'Test';
déclenche une erreur d'analyse.
Certains des tests rapides avec les variables syntaxe révèle que, en fait, PHP ne semble pas vraiment se soucier des noms de variables comme ils sont des chaînes de caractères:
${'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"
Ma conjecture est que la nomination susmentionnée restriction est imposée par le code source de l'analyseur plutôt que de la langue de base. Elle a besoin de ces règles à dire des variables à part lors de l'analyse de code PHP. En interne, le moteur Zend, que les pouvoirs PHP traite des variables d'un algorithme de hachage de la carte:
Les variables PHP, en général, se composent de deux choses: L'étiquette, qui
pourrait, par exemple, être une entrée dans la table des symboles, et de la
variable contenant.
Donc autant que l'on reçoit une chaîne valide pour l'étiquette, il est heureux.