奇怪的位置打开和关闭PHP标记?
我对编程相当陌生,已经吸收了大约150页的一本书。当下面的代码给我重重一击时,我正在顺利地使用PHP。有人能解释一下打开和关闭PHP标记的位置吗奇怪的位置打开和关闭PHP标记?,php,Php,我对编程相当陌生,已经吸收了大约150页的一本书。当下面的代码给我重重一击时,我正在顺利地使用PHP。有人能解释一下打开和关闭PHP标记的位置吗 <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { echo "<p>Thanks for Registering</p>", "Username: ", htmlentities ($_POST['username']), "<br />",
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<p>Thanks for Registering</p>",
"Username: ", htmlentities ($_POST['username']), "<br />",
"Email: ", htmlentities ($_POST['email']), "<br />";
}
else { ?>
<form action = "test.php" method = "post">
<label for = "username">Username: </label>
<input type = "text" name = "username" />
<label for = "email">Email: </label>
<input type = "text" name = "email" />
<input type = "submit" value = "Register" />
</form>
<?php }
?>
用户名:
电邮:
我认为应该只有一对PHP标记:
试试这个
试试这个
根据上的手册
当PHP解析文件时,它会查找打开和关闭标记,这
它们告诉PHP开始和停止解释
他们之间的代码。以这种方式进行解析可以将PHP嵌入到
各种不同的文档,就像一对
PHP解析器忽略打开和关闭标记
这意味着php标记之间的代码将是echo'd和外部代码:
<form action = "test.php" method = "post">
<label for = "username">Username: </label>
<input type = "text" name = "username" />
<label for = "email">Email: </label>
<input type = "text" name = "email" />
<input type = "submit" value = "Register" />
</form>
用户名:
电邮:
将被视为普通HTML。在上面的例子中,PHP检查表单是否已发布,如果已发布,它将显示一条感谢消息。如果HTTP请求不是POST,它将显示一个表单供用户POST
一般来说,混合使用HTML和PHP是不好的做法,应该避免这种结构 按照
当PHP解析文件时,它会查找打开和关闭标记,这
它们告诉PHP开始和停止解释
他们之间的代码。以这种方式进行解析可以将PHP嵌入到
各种不同的文档,就像一对
PHP解析器忽略打开和关闭标记
这意味着php标记之间的代码将是echo'd和外部代码:
<form action = "test.php" method = "post">
<label for = "username">Username: </label>
<input type = "text" name = "username" />
<label for = "email">Email: </label>
<input type = "text" name = "email" />
<input type = "submit" value = "Register" />
</form>
用户名:
电邮:
将被视为普通HTML。在上面的例子中,PHP检查表单是否已发布,如果已发布,它将显示一条感谢消息。如果HTTP请求不是POST,它将显示一个表单供用户POST
一般来说,混合使用HTML和PHP是不好的做法,应该避免这种结构 开始和结束
开始和结束思考它的最简单方法是执行解析器所做的操作,即用php标记内的echo语句替换php标记外的内容
这样做的主要好处是,您不必在php字符串中转义HTML,而且,如果结构良好,您可以在WYSIWYG编辑器中很好地查看它
下面是一个代码示例,它与您编写的代码相同,并且不会切换到php模式
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<p>Thanks for Registering</p>",
"Username: ", htmlentities ($_POST['username']), "<br />",
"Email: ", htmlentities ($_POST['email']), "<br />";
}
else {
echo "
<form action = \"test.php\" method = \"post\">
<label for = \"username\">Username: </label>
<input type = \"text\" name = \"username\" />
<label for = \"email\">Email: </label>
<input type = \"text\" name = \"email\" />
<input type = \"submit\" value = \"Register\" />
</form>";
}
?>
考虑这个问题最简单的方法是做解析器所做的事情,即用php标记内的echo语句替换php标记外的内容
这样做的主要好处是,您不必在php字符串中转义HTML,而且,如果结构良好,您可以在WYSIWYG编辑器中很好地查看它
下面是一个代码示例,它与您编写的代码相同,并且不会切换到php模式
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<p>Thanks for Registering</p>",
"Username: ", htmlentities ($_POST['username']), "<br />",
"Email: ", htmlentities ($_POST['email']), "<br />";
}
else {
echo "
<form action = \"test.php\" method = \"post\">
<label for = \"username\">Username: </label>
<input type = \"text\" name = \"username\" />
<label for = \"email\">Email: </label>
<input type = \"text\" name = \"email\" />
<input type = \"submit\" value = \"Register\" />
</form>";
}
?>
PHP手册在解释实际发生的事情方面做得很差。PHP解析器肯定不会忽略块外的文本。相反,PHP解析器将该文本转换为回显操作。不相信我?您可以在源代码中自己查看。在zend_language_parser.y中,您将看到以下行:
| T_INLINE_HTML { zend_do_echo(&$1 TSRMLS_CC); }
当您看到…
时,它完全等同于
语法可能看起来很奇怪,但在某些情况下它实际上非常有用。例如,我们所有的网页通常共享相同的页眉和页脚。人们通常通过在脚本开头执行include('header.html'),在脚本结尾执行include('footer.html')来处理这个问题。这不是一个非常灵活的方法。此外,最终会导致一个HTML文档的两半无法在浏览器中正确呈现
更好的方法是使用函数声明分割HTML文档:
<?php function printHeader($title = "Default Title", $extraJSScrpts = array(), $extraCSSFiles = array()) { ?>
<html>
<head>
<title>
<?php echo $title; ?>
</title>
</head>
<body>
<div style="position: absolute; left: 150px; top: 35px;">
<?php } ?>
<?php function printFooter() { ?>
</div>
</body>
</html>
<?php } ?>
如果您忽略
,那么您拥有的就是一个普通的HTML文档。再看看PHP,您会发现我有两个函数,printHeader()和printFooter()。我的所有页面现在只调用这两个函数,而不是执行include。每个页面都可以传递可选参数来处理任何特殊需求(例如,一个额外的样式表)。如果我想在我的网站上实现不同的主题,这将是非常直接的。我所要做的就是更改开始时包含的文件,以引入这些函数的不同版本。PHP手册在解释实际发生的情况方面做得很差。PHP解析器肯定不会忽略块外的文本。相反,PHP解析器将该文本转换为回显操作。不相信我?您可以在源代码中自己查看。在zend_language_parser.y中,您将看到以下行:
| T_INLINE_HTML { zend_do_echo(&$1 TSRMLS_CC); }
当您看到…
时,它完全等同于
语法是migh
<table style="width: 100%">
<?php foreach($items as $index => $item): ?>
<?php if(!($index & 0x0001)): // even ?>
<tr style="background-color: #FFFFAA">
<td>
<?php echo $item ?>
</td>
</tr>
<?php else: ?>
<tr style="background-color: #AAFFFF">
<td>
<?php echo $item ?>
</td>
</tr>
<?php endif ?>
<?php endforeach ?>
</table>