PHP中一個字串可以通過下面的4種方式來定義:
- 單引號
- 雙引號
- heredoc 文法結構
- nowdoc 文法結構 (自PHP 5.3.0以後)
單引號
定義一個字串 的最簡單的方法是用單引號把它包圍起來 (標點符號 ')。
如果想要輸出一個單引號,需在它的前面加個反斜線 (\)。在單引號前或在字串的結尾處 想要輸出反斜線,輸入兩條 (\\)。注意,如果在任何其它的字元前加了反斜線,反斜線將會被直接輸出。
Note: 不像雙引號 和heredoc文法結構, 在單引號字串中的變數 和特殊含義的字元將不會被替換。
如果字串是包圍在雙引號(")中, PHP將對一些逸出字元進行解析,和單引號字串一樣, 如果輸出逸出字元之外的字元,反斜線會被列印出來。 PHP5.1.1以前,\{$var} 中的反斜線還不會被顯示出來。
用雙引號定義的 字串最重要的特徵是變數會被執行。
Heredoc結構
第三種定義字串的方法是用heredoc句法結構:<<<。在該提示 符後面,要定義個標識符,然後是一個新行。接下來是字串本身,最後要用前面定義的標識符作為結束標誌。
結束時所引用的標識符必須在一行的開始位置, 而且,標識符的命名也要像其它標籤一樣遵守PHP的規則:只能包含 字母、數字和底線,並且不能用數字和底線作為開頭。
Warning要注意的是結束標識符這行除了 可能有一個分號(;)外,絕對不能包括 其它字元。這意味著標識符不能縮排,分號的前後也不能有任何空白或tabs。更重要的是結束標識符的前面必須是個被本地 作業系統認可的新列標籤,比如在UNIX和Mac OS X系統中是\n ,而結束標識符(可能有個分號)的後面也必須跟個 新列標籤。
如果不遵守該規則導致結束標籤不“乾淨”,PHP將認為它不是結束標識符而繼續尋找。如果在檔案結束前也沒有找到一個正確的結束標識符,PHP將會在最後一 行產生一個句法錯誤。
Heredoc結構就象是沒有使用雙引號的雙引號字串, 這就是說在heredoc結構中引號不用被替換,但是上文中列出的字元 (\n等)也可使用。 變數將被替換,但在heredoc結構中字串表達複雜變數時,要格外小心。
Nowdoc結構
就象heredoc結構類似於雙引號字串,Nowdoc結構是類似於單引號字串的。Nowdoc結構很象heredoc結構,但是 nowdoc不進行解析操作 。 這種結構很適合用在不需要進行轉義的PHP代碼和其它大段文本。與SGML的 <![CDATA[ ]]> 結構是用來聲明大段的不用解析的文本類似,nowdoc結構也有相同的特徵。
一個nowdoc結構也用和heredocs結構一樣的標記 <<<, 但是跟在後面的標誌符要用 單引號括起來,就像<<<'EOT'這樣。heredocs結構的所有規則也同樣適用於nowdoc結 構,尤其是結束標誌符的規則。
變數解析
當字串用雙引號或heredoc結構定義時,其中的變 量將會被解析。
這裡共有兩種文法規則:一種簡單 規則,一種複雜規 則。簡單的句法規則是最常用和最方便的, 它可以用最少的代碼在一個字串中加入變數, 數組 值,或 對象屬性。
複雜的句法規則是在PHP4以後加入的,被花括弧包圍的運算式是其明顯標記。
簡單句法規則
當PHP解析器遇到一個貨幣符號 ($) , 它會和其它很多解析器一樣,去盡量形成一個合法的變數名。可以用花括 號來明確變數名的界線。
如果想要表達更複雜的結構,請用複雜句法規則。
複雜句法規則
複雜句法規則不是結構複雜而命名,而是因為它可以使用複雜的運算式。
任何想用在字串中標量變數,陣列變數或對象屬性都可使用這種方法。 只需簡單地像在字串以外的地方那樣寫出運算式, 然後用花括弧{和 }把它括起來。 由於 { 無法被轉義,只有 $ 要緊挨著 {才會被認出來,可以用 {\$ 來表達 {$。
存取和修改字串中的字元
字串中的字元可以通過一個以0為開始的,用類似數組結構中的方括弧包含對應的數字來尋找和修改,比如 $str[42], 可以把 字串想像數組 。 函數 substr() 和 substr_replace()可以用來實現多於一個字元 的情況。
Warning方括弧中的數字超出範圍將會產生空白。非整數類型被轉換成整數,非整數類型轉變成整數,非法類型會產生一個 E_NOTICE層級錯誤,負數在寫入時會產生一個E_NOTICE,但讀 取的是Null 字元串。被指定的字串只有第一個字元可用,Null 字元串用指定為空白位元組。
有用的函數和操作符
字串可以用'.' (點) 操作符串連起來, 注意 '+' (加號) 操作符沒有 這個功能。
對於字串的操作有很多有用的函數。
可以參考 字串函數 瞭解大部分函數, 進階的尋找&替換功能可以參考 Regex函數 或 Perl類型的正則 運算式函數。
另外還有URL字串的函數, 也有加密/解密字串的函數。 (mcrypt 和 mhash).
最後,可以參考 字元類型函數。
轉換成字串
一個值可以通過在其前面加上(string)或用strval()函數來轉變成 字串。 在一個需要字串的運算式中,字串會自動轉變,比如在使用函數 echo 或 print 時, 或在一個變數和一個 字串 進行比較時,就會發生這種轉變 類型 和 類型轉換 可以更好的解釋下面的事情,也可參考函 數 settype() 。
一個boolean TRUE 值被轉換成 字串"1"。 Boolean FALSE 被轉換成"" (空的字串)。 這種轉變可以在 boolean 和 字串 之間往返進行。
一個 整數 或 浮點數 被轉變為數位字面樣式的字串 (包括 浮點數中的指數部分),使用指數計數法的浮點數 (4.1E+6)也可轉變。
數群組轉換成 字串 "Array",因此, echo 和 print c無法顯示出該數組的值。如果顯示一個數組值,可以用 echo $arr['foo']這種結構,更多內容見下文。
在PHP 4中對象被轉換成 字串 "Object", 為了調試原因需要列印出對象的值,方法見本文。為了得到對象的類的名稱,可以用 get_class() 函數。 在PHP5中, 可以用 __toString 。
資源總會被轉變成"Resource id #1"這種結構的字串 , 其中的 1 是PHP分配給該資源的獨特數字。不用過多關注這種結構,它馬上要轉變了。為了得到一個 resource類型,可以用函數 get_resource_type()。
NULL 總是被轉變成空的字串。
如上面所說的,直接把數組, 對象或 資源 轉換成 字串 不會得到超出其自身的更多資訊。可以使用函數 print_r() 和 var_dump() 列出這些類型的內容。
大部分的PHP值可以轉變成 字串s 來長期儲存,這被稱作序列化,可以用函數 serialize() 來實現。 如果PHP引擎設定支援 WDDX , PHP值也可儲存成XML格式。
字串轉變成數字
當一個字串被用在了一個數位環境中,結果和類型如下:
如果字串沒有包含 '.','e'或'E' 並且數字值符合整數類型的限定 ( PHP_INT_MAX定義的), 這個 字串 可被認定是一個 integer, 在其它情況下被認定為一個float。
字串的開始部分給定了它的值,如果 字串 以合法的數字開始,這個數字可直接使用。 否則,值就是 0 (零)。 合法數值由符號,後面跟著一個或多個數字(可能有個小數點),再跟著可選的指數符號如'e' 或 'E',後面跟著一個或多個數字。
不要想像在C語言中的那樣,通過一個整數轉換得到相應字元,使用函數 ord() 和 chr() 實現ASCII碼和字元間的轉換。