字符串
String 是一系列字符。在 PHP 中,字符和字節一樣,也就是說,一共有 256 種不同字符的可能性。這也暗示 PHP 對 Unicode 沒有本地支持。請參閱函數 utf8_encode() 和 utf8_decode() 以了解有關 Unicode 支持。
注: 一個字符串變得非常巨大也沒有問題,PHP 沒有給字符串的大小強加實現范圍,所以完全沒有理由擔心長字符串。
語法
字符串可以用三種字面上的方法定義。
單引號
雙引號
定界符
單引號
指定一個簡單字符串的最簡單的方法是用單引號(字符 ')括起來。
要表示一個單引號,需要用反斜線()轉義,和很多其它語言一樣。如果在單引號之前或字符串結尾需要出現一個反斜線,需要用兩個反斜線表示。注意如果你試圖轉義任何其它字符,反斜線本身也會被顯示出來!所以通常不需要轉義反斜線本身。
注: 在 PHP 3 中,此情況下將發出一個 E_NOTICE 級的警告。
注: 和其他兩種語法不同,單引號字符串中出現的變量和轉義序列不會被變量的值替代。
<?phpecho 'this is a simple string';echo 'You can also have embedded newlines instrings this way as it isokay to do';// Outputs: Arnold once said: "I'll be back"echo 'Arnold once said: "I'll be back"';// Outputs: You deleted C:*.*?echo 'You deleted C:\*.*?';// Outputs: You deleted C:*.*?echo 'You deleted C:*.*?';// Outputs: This will not expand: n a newlineecho 'This will not expand: n a newline';// Outputs: Variables do not $expand $eitherecho 'Variables do not $expand $either';?>
雙引號
如果用雙引號(")括起字符串,PHP 懂得更多特殊字符的轉義序列:
表格 11-1. 轉義字符
序列 含義
n 換行(LF 或 ASCII 字符 0x0A(10))
r 回車(CR 或 ASCII 字符 0x0D(13))
t 水平制表符(HT 或 ASCII 字符 0x09(9))
\ 反斜線
$ 美元符號
" 雙引號
[0-7]{1,3} 此正則表達式序列匹配一個用八進制符號表示的字符
x[0-9A-Fa-f]{1,2} 此正則表達式序列匹配一個用十六進制符號表示的字符
此外,如果試圖轉義任何其它字符,反斜線本身也會被顯示出來!
雙引號字符串最重要的一點是其中的變量名會被變量值替代。細節參見字符串解析。
定界符
另一種給字符串定界的方法使用定界符語法(“<<<”)。應該在 <<< 之後提供一個標識符,然後是字符串,然後是同樣的標識符結束字符串。
結束標識符必須從行的第一列開始。同樣,標識符也必須遵循 PHP 中其它任何標簽的命名規則:只能包含字母數字下劃線,而且必須以下劃線或非數字字符開始。
警告
很重要的一點必須指出,結束標識符所在的行不能包含任何其它字符,可能除了一個分號(;)之外。這尤其意味著該標識符不能被縮進,而且在分號之前和之後都不能有任何空格或制表符。同樣重要的是要意識到在結束標識符之前的第一個字符必須是你的操作系統中定義的換行符。例如在 Macintosh 系統中是 r。
如果破壞了這條規則使得結束標識符不“干淨”,則它不會被視為結束標識符,PHP 將繼續尋找下去。如果在這種情況下找不到合適的結束標識符,將會導致一個在腳本最後一行出現的語法錯誤。
定界符文本表現的就和雙引號字符串一樣,只是沒有雙引號。這意味著在定界符文本中不需要轉義引號,不過仍然可以用以上列出來的轉義代碼。變量會被展開,但當在定界符文本中表達復雜變量時和字符串一樣同樣也要注意。
例子 11-2. 定界符字符串例:
foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); }}$foo = new foo();$name = 'MyName';echo <<foo.Now, I am printing some {$foo->bar[1]}.This should print a capital 'A': x41EOT;?>
注: 定界符支持是 PHP 4 中加入的。
1