鱼C论坛

 找回密码
 立即注册
查看: 2468|回复: 0

[技术交流] 【php包教不包会系列10】PHP 类型之字符串

[复制链接]
发表于 2017-3-12 22:40:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mumudontcry 于 2017-3-12 23:26 编辑

字符串

一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode

字符串会被按照该脚本文件相同的编码方式来编码

字符串最大可以达到 2GB。

字符串的表达方式

1、单引号

定义一个字符串的最简单的方法是用单引号把它包围起来
  1. <?php

  2. echo 'string';
复制代码


想要表达单引号本身,需要在前面加上反斜杠(\'),同样的,要表达反斜杠,则要写成两个反斜杠(\\),其他任何转义字符的形式都表示它本身,也就是说,除了上面两个,其他的反斜杠就是反斜杠,不会转义

2、双引号
  1. <?php

  2. $var = 'world';
  3. echo "hello {$var}";
复制代码


和单引号不同的是,双引号里面的转义字符会成功被转义:

\n        换行(ASCII 字符集中的 LF 或 0x0A (10))
\r        回车(ASCII 字符集中的 CR 或 0x0D (13))
\t        水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v        垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\e        Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
\f        换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
\\        反斜线
\$        美元标记
\"        双引号
\[0-7]{1,3}        符合该正则表达式序列的是一个以八进制方式来表达的字符
\x[0-9A-Fa-f]{1,2}        符合该正则表达式序列的是一个以十六进制方式来表达的字符

此外,双引号里面的变量会被解析出来,就像例子中的那样,在例子中,你可以把花括号去掉,实际结果并不会改变,只不过不建议这么做,因为加了加了花括号 PHP 在解析的时候速度会快一点,后面将会具体给出一些使用的建议

3、heredoc 语法结构

heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。
  1. <?php

  2. $a = <<<EOT
  3.     string
  4. hello
  5. world
  6. EOT;
复制代码


最终的输出结果也会和上面格式一样,你不需要写什么换行(\n),它自己就换行了呢~这个标识符可以换成任意的字符,嗯……比如你女朋友的名字(首先,你得……)
注意:后面的那个EOT前面不能有任何字符,如果有,那么这个EOT将不会被看作是标识,而是字符串本身的一部分


这种语法结构相当于段落式的双引号写法

所以,你也可以这样使用它:
  1. <?php

  2. var_dump(<<<LOVE
  3. my girl
  4.              friend
  5. LOVE);
复制代码


4、nowdoc 语法结构(5.3+)

这种语法结构是段落式的单引号写法,和上面的语法结构唯一的写法区别就是,第一个EOT要用单引号括起来
  1. <php

  2. echo <<<'EOT'
  3. mumu{$var}
  4. EOT;
复制代码


这个时候,这个 $var 并不会被解析,这是要注意的地方!

关于 PHP 变量的解析

当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。

这就是为什么刚才我建议在双引号里使用花括号的原因,因为这可以明确告诉 PHP,这里遇到了一个变量,而不需要 PHP 去尝试

单引号和双引号使用的建议

1、表示简单的数据时(不需要转义),尽量用单引号。

2、如果因为使用单引号,而需要进行转义(即包含单引号),考虑使用双引号。

3、如果需要表示变量,应尽量使用花括号。

4、尽量不使用连接符号(.),因为这个效率比花括号的双引号还低!

有些网站的 PHP 教程可能会跟你说:

echo 多个值的时候,用逗号,而不用连接符号(.),因为这个效率是最快的(其实就是告诉 PHP,你把这些变量打印出来,而不是告诉 PHP,你先计算一下它们拼起来的结果,再打印),所以说,如果可以不用字符串连接符号(.),那就不要用吧

5、如果你要打印的文本很复杂,比如有多个换行,使用 “? doc语法结构”会很轻松

6、这一条,是一个未经过别人认可,我自己总结的,能不用数字,就不用数字,而是用字符串代替,在前面关于数字的内容中,已经介绍过数字的类型转换的奇怪的现象,如果不想遇到莫名其妙的 bug,就统一用字符串去处理你的数据,这里有几个可以参考的有些说服力的例子:

Yii 框架中,从数据库查询出来的数据,数字格式的数据查询出来之后默认是字符串,比如你存了 10.23 的金额在某条记录中,你查询得到的将会是字符串的结果

bc math (之前提到好多的)的所有返回结果都是字符串,注意,这个可是一个数学扩展,换句话说,连数字相关的函数都返回字符串,你自己为何还要用数字?

作业

试一试上面提到的四种字符串写法


#################### 华丽的 PHP 版分割线 ####################


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

一块钱买不了皮肤,买不了香烟,却可以跟着木木一起打怪升级,并给木木巨大的支持,有了大家的力量,木木就可以制造元气弹,打败……嗯,买一个好一点的女朋友啦

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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