Maison  >  Article  >  développement back-end  >  Pourquoi l'interpolation de chaîne de PHP fonctionne-t-elle avec des tableaux associatifs même sans accolades ?

Pourquoi l'interpolation de chaîne de PHP fonctionne-t-elle avec des tableaux associatifs même sans accolades ?

DDD
DDDoriginal
2024-10-30 12:39:02812parcourir

 Why does PHP's string interpolation work with associative arrays even without curly braces?

Interpolation de tableaux associatifs en PHP : découverte d'un comportement inattendu

L'interpolation de chaînes de PHP offre un moyen pratique d'intégrer des variables dans des chaînes. Cependant, lorsque vous travaillez avec des tableaux associatifs, le comportement d'interpolation peut s'écarter des attentes.

Considérez l'extrait de code suivant :

<code class="php">$ha = ['key1' => 'Hello to me'];

print $ha['key1'];   // correct (usual way)
print $ha[key1];     // Warning, works (use of undefined constant)

print "He said {$ha['key1']}"; // correct (usual way)
print "He said {$ha[key1]}";   // Warning, works (use of undefined constant)

print "He said $ha['key1']";   // Error, unexpected T_ENCAPSED_AND_WHITESPACE
print "He said $ha[ key1 ]";   // Error, unexpected T_ENCAPSED_AND_WHITESPACE
print "He said $ha[key1]";     // !! correct (How Comes?)</code>

Notez la dernière ligne du code :

<code class="php">print "He said $ha[key1]";</code>

Étonnamment, cette ligne s'exécute correctement, même si elle utilise une syntaxe apparemment incorrecte. Pour comprendre ce comportement, nous examinons le mécanisme d'interpolation de PHP.

PHP permet l'interpolation de variables à l'aide de deux syntaxes :

  1. Chaînes entre guillemets : "$var"
  2. Accolades entre guillemets : "${$var}"

Dans le cas de tableaux associatifs, la deuxième syntaxe est explicitement recommandée dans la documentation. Cependant, le mécanisme d'interpolation de PHP inclut une exception spéciale pour accéder aux éléments de tableau associatifs dans des chaînes entre guillemets.

Si une variable entre guillemets contient une clé non entourée d'accolades, l'interpréteur suppose qu'elle fait référence à une variable associative. clé du tableau. Cette interprétation s'étend même si la clé est séparée des crochets par des espaces ou d'autres caractères d'espacement.

Ainsi, la ligne suivante est reconnue comme interpolation valable :

<code class="php">print "He said $ha[key1]";</code>

En conclusion, while il est considéré comme "correct" selon l'interpréteur PHP, ce comportement d'interpolation peut être inattendu. Cependant, la syntaxe recommandée pour interpoler les éléments d'un tableau associatif dans des chaînes reste l'utilisation d'accolades, car elle garantit un comportement cohérent et prévisible entre les différentes versions de PHP et garantit la compatibilité avec les versions futures.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn