【php包教不包会系列10】PHP 类型之字符串
本帖最后由 mumudontcry 于 2017-3-12 23:26 编辑字符串
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode
字符串会被按照该脚本文件相同的编码方式来编码
字符串最大可以达到 2GB。
字符串的表达方式
1、单引号
定义一个字符串的最简单的方法是用单引号把它包围起来
<?php
echo 'string';
想要表达单引号本身,需要在前面加上反斜杠(\'),同样的,要表达反斜杠,则要写成两个反斜杠(\\),其他任何转义字符的形式都表示它本身,也就是说,除了上面两个,其他的反斜杠就是反斜杠,不会转义
2、双引号
<?php
$var = 'world';
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 起)
\\ 反斜线
\$ 美元标记
\" 双引号
\{1,3} 符合该正则表达式序列的是一个以八进制方式来表达的字符
\x{1,2} 符合该正则表达式序列的是一个以十六进制方式来表达的字符
此外,双引号里面的变量会被解析出来,就像例子中的那样,在例子中,你可以把花括号去掉,实际结果并不会改变,只不过不建议这么做,因为加了加了花括号 PHP 在解析的时候速度会快一点,后面将会具体给出一些使用的建议
3、heredoc 语法结构
heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。
<?php
$a = <<<EOT
string
hello
world
EOT;
最终的输出结果也会和上面格式一样,你不需要写什么换行(\n),它自己就换行了呢~这个标识符可以换成任意的字符,嗯……比如你女朋友的名字(首先,你得……)
注意:后面的那个EOT前面不能有任何字符,如果有,那么这个EOT将不会被看作是标识,而是字符串本身的一部分
这种语法结构相当于段落式的双引号写法
所以,你也可以这样使用它:
<?php
var_dump(<<<LOVE
my girl
friend
LOVE);
4、nowdoc 语法结构(5.3+)
这种语法结构是段落式的单引号写法,和上面的语法结构唯一的写法区别就是,第一个EOT要用单引号括起来
<php
echo <<<'EOT'
mumu{$var}
EOT;
这个时候,这个 $var 并不会被解析,这是要注意的地方!
关于 PHP 变量的解析
当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。
这就是为什么刚才我建议在双引号里使用花括号的原因,因为这可以明确告诉 PHP,这里遇到了一个变量,而不需要 PHP 去尝试
单引号和双引号使用的建议
1、表示简单的数据时(不需要转义),尽量用单引号。
2、如果因为使用单引号,而需要进行转义(即包含单引号),考虑使用双引号。
3、如果需要表示变量,应尽量使用花括号。
4、尽量不使用连接符号(.),因为这个效率比花括号的双引号还低!
有些网站的 PHP 教程可能会跟你说:
echo 多个值的时候,用逗号,而不用连接符号(.),因为这个效率是最快的(其实就是告诉 PHP,你把这些变量打印出来,而不是告诉 PHP,你先计算一下它们拼起来的结果,再打印),所以说,如果可以不用字符串连接符号(.),那就不要用吧
5、如果你要打印的文本很复杂,比如有多个换行,使用 “? doc语法结构”会很轻松
6、这一条,是一个未经过别人认可,我自己总结的,能不用数字,就不用数字,而是用字符串代替,在前面关于数字的内容中,已经介绍过数字的类型转换的奇怪的现象,如果不想遇到莫名其妙的 bug,就统一用字符串去处理你的数据,这里有几个可以参考的有些说服力的例子:
Yii 框架中,从数据库查询出来的数据,数字格式的数据查询出来之后默认是字符串,比如你存了 10.23 的金额在某条记录中,你查询得到的将会是字符串的结果
bc math (之前提到好多的)的所有返回结果都是字符串,注意,这个可是一个数学扩展,换句话说,连数字相关的函数都返回字符串,你自己为何还要用数字?
作业
试一试上面提到的四种字符串写法
#################### 华丽的 PHP 版分割线 ####################
如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正
一块钱买不了皮肤,买不了香烟,却可以跟着木木一起打怪升级,并给木木巨大的支持,有了大家的力量,木木就可以制造元气弹,打败……嗯,买一个好一点的女朋友啦
页:
[1]