-1

以下のコードを検討してください:

<?php
   $arr = array('fruit' => 'apple', 'veggie' => 'carrot');

   define('fruit', 'veggie');

   print "Hello {$arr['fruit']}"; //This works

   print "Hello $arr['fruit']"; //This doesn't work
 ?>

2番目のものが機能せず、次のような解析エラーが発生する理由を理解できません:

**Parse error:** syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

また、上記のプログラムを以下のように書いた場合、それはダイを追加した場合です。最初の実行行の後、動作していない行を静止させます。同じエラーが発生します。

 <?php
   $arr = array('fruit' => 'apple', 'veggie' => 'carrot');

   define('fruit', 'veggie');

   print "Hello {$arr['fruit']}";
   die;
   print "Hello $arr['fruit']";
 ?>

これはまったくわかりませんでした。最初の行を印刷する必要がありました。その後、コードを死にかけているため、コンパイル中に次の行を考慮する必要はありませんが、最初の行の実行を考慮して禁止しています。

なんでそうなの?

4

1 に答える 1

1

解析エラーは、二重引用符で囲まれた文字列内で変数が解析される方法が原因です。それについてはこちらをお読みください。

2 番目の例では、PHP$arrは括弧が部分文字列のようなアクションを実行する文字列であると解釈します。そのシナリオでは、一重引用符が存在してはならず、解析エラーが発生します。

これは、2 番目の質問につながります。PHP が PHP ファイルを解析しようとすると、解析エラーが発生します。PHP はダイ ステートメントの後に何が来るかをまだ認識していないため (たとえば、スクリプトの別の部分から呼び出す関数がそこにある可能性があります)、すべての行を解析する必要があります。したがって、解析エラーはまだ実行ロジックを気にしません。

于 2017-11-19T09:43:58.843 に答える