马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 mumudontcry 于 2017-2-21 22:06 编辑
写在前面
上一篇讲了 PHP 的基础大概,现在我们开始详细讲解一下:PHP 标记
PHP是什么?
PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
以上是官方的解释,我们就按照课本走,因此,在遇到不懂的问题的时候,多查手册:http://php.net/manual/zh/
PHP 官网提供了一个非常友好的文档功能,如果你需要查看一个 PHP 函数的解释,你可以直接通过一个很容易记住的规则直接跳转到对应页面!
比如,我们需要查看函数“array_keys”的解释,我们只需要地址上输入:http://php.net/array_keys
是不是很简单?甚至你可以输入:http://php.net/whatisphp,嗯……一个很有意思的设定
那么现在开始正式的内容
PHP 标记
当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略
这句话意味着,只要你告诉服务器,这货是一个 PHP 文件,然后服务器就可以用 PHP 解析器去解析这个文件,这与后缀是无关的(.php 不是必须的),这个可以在 ThinkPHP 框架的视图层找到例子(ThinkPHP 框架是国人开发的 PHP 框架,丰富的文档、火热的社区……没有广告)
PHP 总共支持四种标记,除了上面的<?php 和 ?>,我们称之为“长标记”还有
短标记:<? 和 ?>,你需要在 php.ini 配置文件里开启 short_open_tag 选项或者在编译 PHP 时使用了配置选项 --enable-short-tags 才能使用
标记:<script language="php"> 和 </script>,这个总是可用
ASP风格:<% 和 %> 需要在 php.ini 中开启 asp_tags 选项
但是!我们切记只使用长标记,其他风格的标记,例如短标记,会和 xml 文件的标记冲突<?xml version="1.0" encoding="UTF-8"?>
是 xml 文件的开始标记,前面的部分刚好符合短标记的格式
同时,其他风格的标记并不适用于任何情况,当你的网站服务商不允许你修改 php.ini 文件,并且你网站里充斥着另外三种标记时,这就是你噩梦的开始
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图
就像这样<?php
echo 'hello world';
举个例子,假设你的网站的纯 PHP 文件使用了结束标记,那么,在不正确的操作 PHP 文件时,可能在文件末尾加上不可见的字符,而在网站渲染视图时,用到 header 函数的地方就会报错,因为 header 函数之前不允许有任何内容的输出!结束标记意味着,在解析 PHP 文件时,文件末尾的不可见字符被打印出来了,所以,纯 PHP 文件是坚决不允许有结束标记的!
开始标记的含义
在 PHP 5.2 和之前的版本中,解释器不允许一个文件的全部内容就是一个开始标记 <?php。自 PHP 5.3 起则允许此种文件,但要开始标记后有一个或更多白空格符。
这句话其实包含另外一个含义,所谓的开始标记其实并不仅仅指“<?php”,而是还需要在后面加一个空格符,这个空格符可能是:tab(\t),换行(\n)、回车(\r)以及(\s)
这也是我建议在开始标记之后,加一个空行的习惯的理由,你不会因为莫名其妙的问题而查资料半天
高级分离术
凡是在一对开始和结束标记之外的内容都会被 PHP 解析器忽略,这使得 PHP 文件可以具备混合内容。 可以使 PHP 嵌入到 HTML 文档中去
<?php if ($expression == true): ?>
表达式为真时显示这里
<?php else: ?>
表达式为假时显示这里
<?php endif; ?>
网页中,你大可不必在一对标记之间写完所有的逻辑,因为,PHP 会把 PHP标记括起来的内容解析成 PHP 去执行,我们就可以让 HTML 代码和 PHP 代码混合使用,这样做,你可以让 HTML 代码看起来更像是 HTML 代码,而不是一个大块的 PHP 代码块
还有一个额外的好处就是,这种方式会比把 HTML 代码用 PHP echo出来更有效率,假如你需要(没有假如,因为 PHP 站点的很多内容就是用 PHP 输出的)输出一大段的内容,echo 的执行效率会比“高级分离术”更低
echo 的简写
在 HTML 中,我们可以用这样的标记去代替<?php echo 'hello world'; ?>,自 PHP 5.4 起,短格式的 echo 标记 <?= 总会被识别并且合法
结构语句的简写
<?php if ($var == 1) { ?>
我是 HTML 代码
<?php } ?>
可以改成
<?php if ($var == 1): ?>
我是 HTML 代码
<?php endif;?>
这样写的好处是,你可以在一个很复杂的结构中,清楚的划分,if 、for语句的位置,因为大括号太多,你根本就不知道哪里跟哪里是一对的
而且这样看起来其实也更有 HTML 风格不是么?
如果你不太清楚这些结构化的语句的结束写法,你可以使用netbeans智能地去输出
关于 PHP 的结束标记
在网页中,结束标记会删除行末的换行符(注意,只是换行符!),你可以尝试在浏览器中打开这样的 PHP 文件
<pre>
I
<?php echo 'am';?>
php
</pre>
以及
<pre>
I
<?php echo 'am';?>.
php
</pre>
第一种会导致m和p连在一起,要解决这个问题,你可以在 m 的这一行的 PHP 标记之外加一个空格,就像这样 "?> "
之所以会提出这个东西,因为很多小伙伴在使用sublime或者其他编辑器时,可能会有一个编辑器设置的习惯,就是保存时去掉末尾空白符号,如果是这样……你的网页可能就坏了,这个是一个陷阱!
结束标记还有一个特性,就是,你可以不需要写末尾的分号,就像这样因为结束标记意味着:行结束,行结束了的话,就可以不需要分号结尾了
最后
我们用一段代码结束这一讲的内容
<?php if ($name == '木木'): ?>
<?= '木木' ?>你好
<?php endif ?>
作业
用 PHP 执行并且说明,最后一段代码包含了这一讲里面说过的哪些知识点?
如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正 |