2

次のスニペットを参照してください。

<?php
  die("----die----");

  sfafsadffas

  echo "foo";
  echo "bar";
?>

結果は次のとおりです。

Parse error: parse error in test.php on line 6.

これは少し予想外です----die----

次を参照してください。

<?php
  die("----die----");

  echo "foo";
  echo "bar";

  sfafsadffas
?>

結果は次のとおりです。

----die----

ここで何が起こっているのですか?

4

6 に答える 6

0

ファイルを実行するときに PHP が最初に行うことは、明白なエラーを探す構文チェックを実行することです。これには、セミコロンの欠落;、括弧の不一致{}などが含まれます。

最初のスニペットは、この最初のテストに失敗します。

<?php
die("----die----");

sfafsadffas  // <-- no semicolon between this line of code and the next,
             //     so you get a 'parse error' before the file even gets run
echo "foo";
echo "bar";
?>

2 番目のスニペットは、PHP の小さな「機能」により、構文チェックを通過します。パーサーは?>セミコロンとしてカウントされます。したがって、実行すると:

<?php
die("----die----");

echo "foo";
echo "bar";

sfafsadffas
?>

構文チェックで「OK」と表示され、PHP はファイルの実行に進みます。sfafsadffasそして、ファイルの早い段階で定義されていれば、ファイルは実際には完全に有効です。

そして、あなたのおかげでdie、コードは7行目まで落ちません.

于 2016-09-05T20:44:10.297 に答える
-1

パーサーが無効なテキストとエラーを検出するため、最初のエラーが発生します。

2 つ目は、PHP インタープリターによって失敗する場合と失敗しない場合があります。プリプロセッサ (またはパーサー) がファイルの末尾にある余分なデータを無視しているため、失敗しない場合があります。

于 2013-10-11T04:27:59.147 に答える
-1

ここでsfafsadffasは定数と見なされます。例 1 では、セミコロンを後ろに置きsfafsadffasます。通常の方法で定数を使用しているため、機能します。例 2 では、コードの最後の行をセミコロンで区切る必要はありません。これを参照してください。

于 2013-10-11T04:52:51.150 に答える
-2

例 1:

実行すべきではありません。コーディングは行ごとに実行されるためです。無効なテキストは実行を停止します。最終的に何も実行されず、実行は失敗します。

例 2:

行ごとの実行のため、両方の echo ステートメントが実行されますが、最終的に実行ステータスは失敗になります。

于 2013-10-11T04:35:06.367 に答える