# 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`。