鱼C论坛

 找回密码
 立即注册
查看: 2664|回复: 1

[技术交流] 【php包教不包会系列5】你不知道的……PHP 标记

[复制链接]
发表于 2017-2-21 20:46:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 的简写
<?= 'hello world'; ?>

在 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 echo '木木' ?>你好
因为结束标记意味着:行结束,行结束了的话,就可以不需要分号结尾了

最后

我们用一段代码结束这一讲的内容
<?php if ($name == '木木'): ?>
<?= '木木' ?>你好
<?php endif ?>

作业

用 PHP 执行并且说明,最后一段代码包含了这一讲里面说过的哪些知识点?


如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正

评分

参与人数 1荣誉 +20 鱼币 +20 贡献 +10 收起 理由
hldh214 + 20 + 20 + 10 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-13 01:48:03 | 显示全部楼层
作业这段代码的开头好像少了对于$name的定义吧,加上才不报错呢~
<?php $name = '木木' ?>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表