string 是一系列字符。在 PHP 中,字符和字節(jié)一樣,也就是說(shuō),一共有 256 種不同字符的可能性。這也暗示 PHP 對(duì) Unicode 沒(méi)有本地支持。請(qǐng)參閱函數(shù) utf8_encode() 和 utf8_decode() 以了解有關(guān) Unicode 支持。
AD:
字符串
String 是一系列字符。在 PHP 中,字符和字節(jié)一樣,也就是說(shuō),一共有 256 種不同字符的可能性。這也暗示 PHP 對(duì) Unicode 沒(méi)有本地支持。請(qǐng)參閱函數(shù) utf8_encode() 和 utf8_decode() 以了解有關(guān) Unicode 支持。
注: 一個(gè)字符串變得非常巨大也沒(méi)有問(wèn)題,PHP 沒(méi)有給字符串的大小強(qiáng)加實(shí)現(xiàn)范圍,所以完全沒(méi)有理由擔(dān)心長(zhǎng)字符串。
語(yǔ)法
字符串可以用三種字面上的方法定義。
單引號(hào)
雙引號(hào)
定界符
單引號(hào)
指定一個(gè)簡(jiǎn)單字符串的最簡(jiǎn)單的方法是用單引號(hào)(字符 ‘)括起來(lái)。
要表示一個(gè)單引號(hào),需要用反斜線()轉(zhuǎn)義,和很多其它語(yǔ)言一樣。如果在單引號(hào)之前或字符串結(jié)尾需要出現(xiàn)一個(gè)反斜線,需要用兩個(gè)反斜線表示。注意如果你試圖轉(zhuǎn)義任何其它字符,反斜線本身也會(huì)被顯示出來(lái)!所以通常不需要轉(zhuǎn)義反斜線本身。
注: 在 PHP 3 中,此情況下將發(fā)出一個(gè) E_NOTICE 級(jí)的警告。
注: 和其他兩種語(yǔ)法不同,單引號(hào)字符串中出現(xiàn)的變量和轉(zhuǎn)義序列不會(huì)被變量的值替代。
<?php echo 'this is a simple string'; echo 'You can also have embedded newlines in strings this way as it is okay 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 newline echo 'This will not expand: n a newline'; // Outputs: Variables do not $expand $either echo 'Variables do not $expand $either'; ?> |
雙引號(hào)
如果用雙引號(hào)(”)括起字符串,PHP 懂得更多特殊字符的轉(zhuǎn)義序列:
表格 11-1. 轉(zhuǎn)義字符
序列 含義
n 換行(LF 或 ASCII 字符 0x0A(10))
r 回車(chē)(CR 或 ASCII 字符 0x0D(13))
t 水平制表符(HT 或 ASCII 字符 0x09(9))
\ 反斜線
$ 美元符號(hào)
” 雙引號(hào)
[0-7]{1,3} 此正則表達(dá)式序列匹配一個(gè)用八進(jìn)制符號(hào)表示的字符
x[0-9A-Fa-f]{1,2} 此正則表達(dá)式序列匹配一個(gè)用十六進(jìn)制符號(hào)表示的字符
此外,如果試圖轉(zhuǎn)義任何其它字符,反斜線本身也會(huì)被顯示出來(lái)!
雙引號(hào)字符串最重要的一點(diǎn)是其中的變量名會(huì)被變量值替代。細(xì)節(jié)參見(jiàn)字符串解析。
定界符
另一種給字符串定界的方法使用定界符語(yǔ)法(“<<<”)。應(yīng)該在 <<< 之后提供一個(gè)標(biāo)識(shí)符,然后是字符串,然后是同樣的標(biāo)識(shí)符結(jié)束字符串。
結(jié)束標(biāo)識(shí)符必須從行的第一列開(kāi)始。同樣,標(biāo)識(shí)符也必須遵循 PHP 中其它任何標(biāo)簽的命名規(guī)則:只能包含字母數(shù)字下劃線,而且必須以下劃線或非數(shù)字字符開(kāi)始。
警告
很重要的一點(diǎn)必須指出,結(jié)束標(biāo)識(shí)符所在的行不能包含任何其它字符,可能除了一個(gè)分號(hào) (;)之外。這尤其意味著該標(biāo)識(shí)符不能被縮進(jìn),而且在分號(hào)之前和之后都不能有任何空格或制表符。同樣重要的是要意識(shí)到在結(jié)束標(biāo)識(shí)符之前的第一個(gè)字符必須是 你的操作系統(tǒng)中定義的換行符。例如在 Macintosh 系統(tǒng)中是 r。
如果破壞了這條規(guī)則使得結(jié)束標(biāo)識(shí)符不“干凈”,則它不會(huì)被視為結(jié)束標(biāo)識(shí)符,PHP 將繼續(xù)尋找下去。如果在這種情況下找不到合適的結(jié)束標(biāo)識(shí)符,將會(huì)導(dǎo)致一個(gè)在腳本最后一行出現(xiàn)的語(yǔ)法錯(cuò)誤。
定界符文本表現(xiàn)的就和雙引號(hào)字符串一樣,只是沒(méi)有雙引號(hào)。這意味著在定界符文本中不需要轉(zhuǎn)義引號(hào),不過(guò)仍然可以用以上列出來(lái)的轉(zhuǎn)義代碼。變量會(huì)被展開(kāi),但當(dāng)在定界符文本中表達(dá)復(fù)雜變量時(shí)和字符串一樣同樣也要注意。
例子 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': x41 EOT; ?> |
注: 定界符支持是 PHP 4 中加入的。