1.4PHP标记及从HTML中分离
下一篇: 1.5PHP的语句分隔符及注释
当解析一个文件时,PHP 会寻找起始符和结束标记符,也就是 <?php 和 ?>。这告诉 PHP 解析器从哪里开始和从哪里停止解析PHP代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何在起始和结束标记符之外的部分都会被 PHP 解析器忽略。
PHP 也允许使用短标记 <? 和 ?>,但不建议使用。只有通过修改 php.ini 中的配置文件,将short_open_tag配置指令开启起来,即将配置文件中short_open_tag = Off修改为short_open_tag = On,或者在编译 PHP 时使用了配置选项 –enable-short-tags 时才能使用短标记。
如果文件内容是纯 PHP 代码,结束符?>还可以省略。建议在纯PHP代码时,在文件末尾删除 PHP 结束标记。因为这可以避免在 PHP 结束标记之后编码者万一不小心加入了空格或者换行符,会导致 PHP 开始输出这些空白,而编码者在写脚本时并无输出的意图。如下:
<?php echo "Hello world" ; // ... 更多代码 echo "Last statement" ; // 脚本至此结束,省略 PHP 结束标记
凡是在一对开始和结束标记符之外的内容都会被 PHP 解析器忽略,这使得 PHP 文件可以具备混合内容。 可以使 PHP 嵌入到 HTML 文档中去,如下例所示:
<p>这里的代码将会被PHP解析器忽略,但是会被浏览器执行。</p> <?php echo '这里的代码会被PHP解析器解析' ; ?> <p>这里的代码也会被PHP解析器忽略,但是会被浏览器执行。</p>
上面的代码将如预期中运行,因为当 PHP 解释器碰到 ?> 结束标记时就简单地将其后内容原样输出直到碰到下一个开始标记;但是也有例外。
例外是处于条件语句中间时,此时 PHP 解释器会根据条件判断来决定哪些输出,哪些跳过。见下例。
Example #1 使用条件语句的分离
<?php if ( $expression == true ): ?> 如果expression为真这里将会被输出 <?php else: ?> 如果expression为假这里会被输出 <?php endif; ?>
上面的代码很简单,就是当expression为true时if下面那段文本将被输出,否则else后面的那段文本被输出。要输出大段文本时,跳出 PHP 解析模式直接用浏览器输出通常比将文本通过 echo 或 print 输出更有效率。
在 PHP 中使用四对不同的开始和结束标记。其中两种,<?php ?> 和 <script language="php"> </script> 总是可用的。
另两种是短标记和 ASP 风格标记,可以在 php.ini 配置文件中打开或关闭。尽管有些人觉得短标记和 ASP 风格标记很方便,但移植性较差,通常不推荐使用。
Example #2 PHP 开始和结束标记 1. <?php echo 'if you want to serve XHTML or XML documents, do it like this' ; ?> 2. <script language="php"> echo 'some editors (like FrontPage) don\'t like processing instructions' ; </script> 3. <? echo 'this is the simplest, an SGML processing instruction' ; ?> <?= expression ?> This is a shortcut for "<? echo expression ?>" 4. <% echo 'You may optionally use ASP-style tags'; %>
上例中的 1 和 2 中使用的标记总是可用的,其中示例 1 中是最常用,所以强烈建议使用它。
短标记(上例 3)仅在通过 php.ini 配置文件中的指令 short_open_tag 打开后才可用,或者在 PHP 编译时加入了 –enable-short-tags 选项。
ASP 风格标记(上例 4)仅在通过 php.ini 配置文件中的指令 asp_tags 打开后才可用。
下面总结几个注意事项:
1.如果将 PHP 代码嵌入到 XML 或 XHTML 中则需要使用 <?php ?> 标记,以保持符合语法标准。
2.为了代码的移植及发行,尽量不要使用短标记。因为有些目标服务器可能不支持短标记。
下一篇: 1.5PHP的语句分隔符及注释
4 Comments
PHP挺难学的,学习了
我是群伟伟博客,第一次来,先看看支持下,希望能有机会和站长一起互访互评,哈哈。
谢谢。在卢松松博客上看到你,对你印象很深。
这个主题蛮有意思的