# String 字符串
## 字符串的常用函数列表
http://www.w3school.com.cn/php/php_ref_string.asp
## 普通字符串
* 使用两个 **单引号** 或是 **双引号** 包括起来的内容就是字符串。
* 双引号字符串中可以使用反斜杠(\)进行转义。
* 在编写代码时,一个字符串如果过长,可以在字符串里面中的任意位置处直接按回车换行继续输入。
* 双引号字符串里的内容会被进行解析,因此可以在其中使用变量。
* 单引号字符串里的内容不会被PHP解析,而是原样输出,因此其效率和双引号相比更快(**存在争议**)。
* 字符串在PHP中实际上是由字节组成的数组。
* 可以使用数组索引的方式访问字符串中单个字符(中文会有乱码)
* 同上,可以使用大括号,例如`$string{0}`。
* 多个字符串拼接使用小数点,而非加号。
* 可以在双引号字符串里使用以下数据:
* 变量
* 数组+索引(数组的key不可以用引号)
* 对象的属性。
* {}大括号的复杂表达式
## heredoc 结构
~~~
$str = >>>abc
这是个奇怪的字符串
就类似于双引号的字符串
里面的内容会被解析
abc;
~~~
* 参考上面的例子,一个heredoc结构的字符串最少包含三行。
* 其中abc是结构体的标识符,可自由定义,如同变量名。
* 在结构结束时单独使用一行,以该标识符加分号表示结束。
## nowdoc 结构
~~~
$str = >>>'abc'
类似于单引号的字符串
里面的内容不会被解析
和heredoc结构用法几乎一样
开始标识符需要使用单引号包围
abc;
~~~
## 字符串转换
* 一个值可以在前面加`(string)`或用`strval()`来转成字符串。
* 布尔值中`true`会被转成`string`的`"1"`,`false`则是`""`空字符串。
* 整数或浮点型会被转成带上引号的字符串。
* 数组会被转成字符串`"Array"`。
* 对象会被转成字符串`"Object"`。
* 通过`get_class()`函数可以获取对象类的名称
* 可以适当的给对象添加`__toString()`方法
* 资源resource会被转成`"Resource id #1"`这种结构的字符串。
* 其中井号后面的1是系统分配给该resource的唯一编号
* 通过`get_resource_type()`函数可以获取其类型
* null会被转成空字符串 `""`;
* 当一个字符串被转换成数字时:
* 如果该字符串没有包含`.`、`e`、`E`则被看做`integer`,其他情况则是被看做`float`。
* 转换时字符串的开始部分决定了它的值,如果它的开始部分是数字,则值为该数字,系统自动省略掉后面部分的其他字符,除此之外的情况,值都是 `0`。
* 如果该字符串的内容不是合法的数值时,值为 `0`。