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').

该代码运行完美,产生了一个下拉选择菜单,但我不明白第二行是如何合法的,更不用说工作了。PHP 代码如何在其封闭标签之外工作?

4

3 回答 3

1

您可以将?><?php标记之间的部分视为 echo 的字符串参数(但没有$variables或引号解释)。

所以<?php echo 2;?>3等价于<?php echo 2; echo 3;?>

于 2012-06-04T17:35:35.763 回答
1

在这种情况下,PHP 是一种不寻常的(模板化)语言。解析器实际上将介于?>和之间的所有内容<?php视为某种奇怪的回声。它作为程序代码的一部分被忽略,尽管解析器确实运行(它只是输出它并作为程序代码的一部分跳过它)。

PHP 手册

PHP 解析器会忽略一对开始和结束标记之外的所有内容,这允许 PHP 文件具有混合内容。这允许 PHP 嵌入到 HTML 文档中,例如创建模板。
(...)
这按预期工作,因为当 PHP 解释器点击 ?> 结束标签时,它只是开始输出它找到的任何内容(除了紧随其后的换行符 - 请参阅指令分隔),直到它遇到另一个开始标签,除非在在条件语句的中间,在这种情况下,解释器将在决定跳过哪些内容之前确定条件语句的结果。

这允许 PHP 用于许多事情。您不能只用它创建动态 HTML 文件,例如,您还可以创建 XML(尽管正确获取 XML 标头有点棘手)、文本文件、CSS 文件等,只要运行 PHP 解释器对于该文件,它将执行<?php?>作为程序代码之间的所有内容,其余部分将按原样输出。

于 2012-06-04T17:36:33.487 回答
0

记住 PHP 代表“PHP:超文本预处理器”会有所帮助。简而言之,它的主要工作是产生 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 回答