4

これが完全に無愛想に聞こえる質問である場合は申し訳ありません。私はPHPの構文規則に慣れていないので、何を探すべきか完全にはわかりません。

私が持っている本は、htmlコードの従来のphpブロックとして次の例を示しています。

<?php
//... some code ...
?>

私はそれを理解していますが、紛らわしいのは、xamppのいくつかの例を見ているサンプルコード(CDコレクションのソースコードなど)が同じ規則に従っていないように見えることです。

代わりに、サンプルコードは次のようになります。

<? include("langsettings.php"); ?>

<?
//... some code ...
?>

2つの形式は、すべての目的と目的でまったく同じですか、それともここでphpのイントロに不可欠な何かを完全に見逃しましたか?

また、なぜphpは終了タグを使用しないのですか(またはそれを使用していて、私はそれらを見ていません)?終了タグ付きのJavaScriptを考えていると思いますが、どちらにしても、それ自体がコードベースであるため、機能します。htmlは構文の中心に対称性があるように見えますが、php構文の並べ替えはその対称性から外れています。これは奇妙なことです。

御時間ありがとうございます。

4

5 に答える 5

4

これらの唯一の違いは、2番目の設定short_open_tagを有効にする必要があることです(新しいPHPバージョンではデフォルトでオフになっています)。

<?php通常のオープンタグ。

<?短いオープンタグ(デフォルトでは無効)

これを超えて、<? include("langsettings.php"); ?>独自のペアで囲まれた独自の行のようなものの配置は<? ?>、実際にはそれを見つけたソースに固有のスタイルの問題です。プロジェクトごとに非常に大きく異なる規則が使用され、PHPの本はそれぞれ独自の規則を採用する傾向があります大会。

残念ながら、PHPには、Ruby、Java、Pythonなどの言語で見られるような、実際の特定のコーディング規則はありません。これは、私の一方的な意見では、PHPの最大の失敗の1つであり、その最大の柔軟性の1つです。

さて、短いオープンタグが最新のPHPアプリケーションで使用するのに良い習慣であるかどうかについては、完全に別の問題であり、ここで詳細に説明されています。

于 2012-06-06T17:44:01.447 に答える
3

2つの形式は同等ですが、ショートコードで問題が発生する可能性があります。私は通常のタグに固執します:

<?php

とによって閉じられたブロック

?>

編集:終了タグはオプションですが、開始タグの後のすべてをページの終わりまでPHPとして解釈する場合に限ります。

これらのブロックの外側はすべてHTMLとして解釈されるため、開いている場所と閉じている場所を確認する必要があります。

例えば:

<body>

<h1> The Heading </h1>

<p>
   <?php
      echo "This is the Content";
   ?>
</p>

</body>

動作し、phpで生成された文字列を段落タグに出力します。

PHPは、「open」タグと「close」タグがないという点でjavascriptに似ていますが、セミコロンを使用して特定のphpステートメントの終わりを宣言します。

include "file1.php";
include "file2.php";

セミコロンを忘れたら

include "file1.php"
include "file2.php";

エラーが発生します。

于 2012-06-06T18:02:08.957 に答える
1

PHPブロックの終了タグはです?>。終了タグは必須ではありませんが、ページの一部をPHPとして解釈し、他の部分をリテラルHTMLとして解釈する場合に使用できます。ページの先頭でPHP処理を実行したい場合は、これを実行してから、いくつかのPHP変数をエコーし​​た通常の静的HTMLページを作成することがあります。

つまり、タグの後、<?phpタグの前にあるテキスト?>はPHPとして解釈されます。終了タグを省略した場合、開始phpタグとページの終わりの間のすべてのテキストはPHPとして解釈されます。

これに対する1つの例外は、phpブロック内で条件ステートメントを開いてからphpブロックを閉じると、新しいphpブロックを開始して条件ステートメントを閉じるまで、ページ上の次のすべてのテキストがその条件の対象になります。たとえば、スクリプトを実行する場合:

<?php
if(1==0) {
?>

<B>conditional HTML</B>

<?php
}
?>

2つのPHPブロック間のHTMLはページに表示されません。

異なるPHPブロックはすべて同じスクリプトの一部であることに注意してください。1つのブロックで定義された変数、関数、およびクラスは、そのページの他のブロックで使用できます。

于 2012-06-06T17:44:16.697 に答える
0

PHPの開始タグは<?phpであり、終了タグは?>です。

サーバーで許可されている短いタグがある場合は、<? ?>構文も使用できます。

詳細については、公式のPHPドキュメントをご覧ください。

よろしく、トム。

于 2012-06-06T17:48:33.033 に答える
0

短いバージョンの長いオープンタグに関する問題はすでにカバーされています。

これらの回答でまだ言及されていない質問の1つの一般的な落とし穴に言及します。

以下を比較してください。

<?php
 /*
  * Some comments here, (c) notice, etc.
  */

  header("Content-type: text/html");
  ...

vs

<?php
 /*
  * Some comments here, (c) notice, etc.
  */
?>

<?php
  header("Content-type: text/html");
  ...

2つ目は機能しません。

なんで?

PHPの最初のブロックと2番目のブロックの間に非PHPコードの空白行があります。出力バッファリングを使用していないサーバー環境では、空白行は、ヘッダーがすべて完了したことをPHPに通知します。これ以降は、ブラウザーに送信されるHTML(またはその他)の一部になります。

次に、ヘッダーを送信しようとします。生成するもの:

Warning: Cannot modify header information - headers already sent

だから...あなたの空白行に注意してください。PHP内の空白行は問題ありません。PHP以外では、厄介な副作用が発生する可能性があります。

于 2012-06-06T21:14:12.363 に答える