ホームページ  >  記事  >  バックエンド開発  >  PHP の文字列補間が中括弧なしでも連想配列で機能するのはなぜですか?

PHP の文字列補間が中括弧なしでも連想配列で機能するのはなぜですか?

DDD
DDDオリジナル
2024-10-30 12:39:02812ブラウズ

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

PHP における連想配列の補間: 予期せぬ動作を明らかにする

PHP の文字列補間は、変数を文字列に埋め込む便利な方法を提供します。ただし、連想配列を使用する場合、補間の動作が期待と異なる場合があります。

次のコード スニペットを検討してください:

<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>

コードの最後の行に注意してください:

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

驚くべきことに、この行は一見間違っているように見える構文を使用しているにもかかわらず、正しく実行されます。この動作を理解するために、PHP の補間メカニズムを詳しく調べます。

PHP では、次の 2 つの構文を使用して変数の補間が可能です。

  1. 二重引用符で囲まれた文字列: "$var"
  2. 二重引用符で囲まれた文字列の中の中括弧: "${$var}"

連想配列の場合、ドキュメントでは 2 番目の構文が明示的に推奨されています。ただし、PHP の補間メカニズムには、二重引用符で囲まれた文字列内の連想配列要素にアクセスするための特別な例外が含まれています。

二重引用符で囲まれた変数に中括弧で囲まれていないキーが含まれている場合、インタープリターはそれが連想配列要素を参照しているものとみなします。配列キー。この解釈は、キーがスペースやその他の空白文字によって角括弧から区切られている場合でも拡張されます。

したがって、次の行は有効な補間として認識されます。

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

結論としては、 PHP インタプリタによれば、これは「正しい」と見なされますが、この補間動作は予期しないものである可能性があります。ただし、連想配列要素を文字列に補間するための推奨構文は、引き続き中括弧の使用です。これにより、さまざまな PHP バージョン間で一貫性のある予測可能な動作が確保され、将来のバージョンとの互換性が確保されます。

以上がPHP の文字列補間が中括弧なしでも連想配列で機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。