字串string 是一系列字元。在 PHP 中,字元和位元組一樣,也就是說,一共有 256 種不同字元的可能性。這也暗示 PHP 對 Unicode 沒有本地支援。請參閱函數 utf8_encode() 和 utf8_decode() 以瞭解有關 Unicode 支援。
語法字串可以用三種字面上的方法定義。 單引號指定一個簡單字串的最簡單的方法是用單引號(字元 ')括起來。 要表示一個單引號,需要用反斜線(\)轉義,和很多其它語系一樣。若果在單引號之前或字串結尾需要出現一個反斜線,需要用兩個反斜線表示。注意若果試圖轉義任何其它字元,反斜線本身也會被顯示出來!所以通常不需要轉義反斜線本身。
雙引號若果用雙引號(")括起字串,PHP 懂得更多特殊字元的轉義序列: 表格 11-1. 轉義字元
此外,若果試圖轉義任何其它字元,反斜線本身也會被顯示出來! 雙引號字串最重要的一點是其中的變量名會被變量值替代。細節參見字串解析。 定界符另一種給字串定界的方法使用定界符語法(「<<<」)。應該在 <<< 之後提供一個標識符,然後是字串,然後是同樣的標識符結束字串。 結束標識符必須從行的第一列開始。同樣,標識符也必須遵循 PHP 中其它任何標籤的命名規則:只能包括字母數字下劃線,而且必須以下劃線或非數字字元開始。
定界符文字表現的就和雙引號字串一樣,只是沒有雙引號。這意味著在定界符文字中不需要轉義引號,不過仍然可以用以上列出來的轉義代碼。變量會被展開,但當在定界符文字中表達複雜變量時和字串一樣同樣也要注意。
變量解析當用雙引號或是定界符指定字串時,其中的變量會被解析。 有兩種語法,一種簡單的和一種複雜的。簡單語法最通用和方便,它提供瞭解析變量,陣列值,或是物件屬性的方法。 複雜語法是 PHP 4 引進的,可以用花括號括起一個表達式。 簡單語法若果遇到美元符號($),解析器會盡可能多地取得後面的字元以組成一個合法的變量名。若果想明示指定名字的結束,用花括號把變量名括起來。
同樣也可以解析陣列索引或是物件屬性。對於陣列索引,右方括號(])標誌著索引的結束。物件屬性則和簡單變量適用同樣的規則,儘管對於物件屬性沒有像變量那樣的小技巧。
對於任何更複雜的情況,應該使用複雜語法。 複雜(花括號)語法不是因為語法複雜而稱其為複雜,而是因為用此方法可以包括複雜的表達式。 事實上,用此語法可以在字串中包括任何在名字空間的值。僅僅用和在字串之外同樣的方法寫一個表達式,然後用 { 和 } 把它包括進來。因為不能轉義「{」,此語法僅在 $ 緊跟在 { 後面時被識別(用「{\$」或是「\{$」來得到一個字面上的「{$」)。用一些例子可以更清晰:
訪問和修改字串中的字元字串中的字元可以通過在字串之後用花括號指定所要字元從零開始的偏移量來訪問和修改。
實用函數及運算符字串可以用「.」(點)運算符連線。注意這裡不能用「+」(加)運算符。更多訊息參見字串運算符。 有很多實用函數來改變字串。 普通函數見字串函數一節,進階搜尋和置換見正則表達式函數(兩種風格:Perl 和 POSIX 增加)。 還有 URL 字串函數,以及加密/解密字串的函數(mcrypt 和 mhash)。 最後,若果還是找不到想要的函數,參見字元類型函數。 字串轉換可以用 (string) 旗標或是 strval() 函數將一個值轉換為字串。當某表達式需要字串時,字串的轉換會在表達式範圍內自動完成。例如當使用 echo() 或是 print() 函數時,或是將一個變量值與一個字串進行比較的時候。閱讀手冊中有關類型和類型戲法中的部分有助於更清楚一些。參見 settype()。 布林值 TRUE 將被轉換為字串 "1",而值 FALSE 將被表示為 ""(即空字串)。這樣就可以隨意地在布林值和字串之間進行比較。 整數或浮點數數值在轉換成字串時,字串由表示這些數值的數字字元組成(浮點數還包括有指數部分)。 陣列將被轉換成字串 "Array",因此無法通過 echo() 或是 print() 函數來輸出陣列的內容。請參考下文以取得更多提示。 物件將被轉換成字串 "Object"。若果因為除錯需要,需要將對象的成員變量列印出來,請閱讀下文。若果希望得到該物件所依附的類的名稱,請使用函數 get_class()。自 PHP 5 起,若果合適可以用 __toString() 方法。 資源類型總是以 "Resource id #1" 的格式被轉換成字串,其中 1 是 PHP 在運行時給資源特殊的唯一標識。若果希望取得資源的類型,請使用函數 get_resource_type()。 NULL 將被轉換成空字串。 正如以上所示,將陣列、物件或是資源列印出來,並不能提供任何關於這些值本身的有用的訊息。請參閱函數 print_r() 和 var_dump(),對於除錯來說,這些是更好的列印值的方法。 可以將 PHP 的值轉換為字串以永久地儲存它們。這種方法被稱為序列化,可以用函數 serialize() 來完成該動作。若果在安裝 PHP 時建立了 WDDX 支援,還可以將 PHP 的值序列化為 XML 結構。 字串轉換為數值當一個字串被當作數字來求值時,根據以下規則來決定結果的類型和值。 若果內含「.」,「e」或「E」其中任何一個字元的話,字串被當作 float 來求值。否則就被當作整數。 該值由字串最前面的部分決定。若果字串以合法的數字資料開始,就用該數字作為其值,否則其值為 0(零)。合法數字資料由可選的正負號開始,後面跟著一個或多個數字(可選地內含十進位分數),後面跟著可選的指數。指數是一個「e」或是「E」後面跟著一個或多個數字。
此轉換的更多訊息見 Unix 手冊中關於 strtod(3) 的部分。 若果想測試本節中的任何例子,可以複製和貼上這些例子並且加上下面這一行自己看看會發生什麼: 不要指望在將一個字元轉換成整型時能夠得到該字元的編碼(可能也會在 C 中這麼做)。若果希望在字元編碼和字元之間轉換,請使用 ord() 和 chr() 函數。 | ||||||||||||||||||||||||||||||