0

私はZendフレームワークに関する本を読んでいますが、このHTML/PHPコードのセクションがわかりません。これは、MVC方法論のVIEWS部分に含まれています。

<select name="genre">
<?php foreach ($this->genres as $genre) { ?> 
<option value="<?php echo $genre ?>"><?php echo $genre ?></option>
<?php } ?>
</select>

ジャンル($this->genres)はを指しarray('rock', 'r&b', 'country', 'rap', 'gospel', 'rock n roll', 'techno')ます。

コードは完全に実行され、ドロップダウン選択メニューが生成されますが、2行目がどのように合法であるか、ましてや機能するかはわかりません。PHPコードは、囲んでいるタグを超えてどのように機能しますか?

4

3 に答える 3

1

PHPは、このコンテキストでは珍しい(テンプレート化された)言語です。パーサーは、実際にはとの間のすべてを奇妙な種類のエコー?>と見なします。<?phpパーサーは実行されますが、プログラムコードの一部として無視されます(出力され、プログラムコードの一部としてスキップされます)。

PHPマニュアルから:

開始タグと終了タグのペア以外のすべては、PHPファイルが混合コンテンツを持つことを可能にするPHPパーサーによって無視されます。これにより、たとえばテンプレートを作成するために、PHPをHTMLドキュメントに埋め込むことができます。
(...)
これは期待どおりに機能します。これは、PHPインタープリターが?>終了タグにヒットすると、別の開始タグにヒットするまで、検出したものを出力し始めるためです(直後の改行を除く-命令の区切りを参照)。条件付きステートメントの途中。この場合、インタープリターは、何をスキップするかを決定する前に、条件付きの結果を決定します。

これにより、PHPをさまざまな用途に使用できます。これを使用してダイナミックHTMLファイルを作成するだけでなく、たとえば、PHPインタープリターが実行されている限り、XML(XMLヘッダーを正しく取得するのは少し難しいですが)、テキストファイル、CSSファイルなどを作成することもできます。そのファイルについては、プログラムコードとしてとの間のすべてを実行し<?php?>残りはそのまま出力されます。

于 2012-06-04T17:36:33.487 に答える
1

?>タグと<?phpタグの間のセクションは、エコーする文字列引数と考えることができます(ただし、$variablesまたは引用符の解釈はありません)。

So<?php echo 2;?>3は と同等<?php echo 2; echo 3;?>です。

于 2012-06-04T17:35:35.763 に答える
0

PHPは「PHP:HypertextPreprocessor」の略であることを覚えておくと役に立ちます。つまり、その主な仕事はHTML出力を生成することです。

PHPタグ内のすべてがサーバー側で実行され、必要に応じて出力を生成します。これは、PHPが無視するすべてのもの(あなたの場合のように、PHPタグの外側にあるもの)に追加さ<option value...></option>れます。

PHPタグに遭遇するたびにPHPエンジンがオン/オフするかのように考えることができます。

<?php //this gets processed ?>
This is sent as output, unchanged
<?php // this gets processed ?>

等々。

于 2012-06-04T17:36:07.153 に答える