PHP第二節(jié)數(shù)據(jù)類(lèi)型之字符串類(lèi)型
來(lái)源:易賢網(wǎng) 閱讀:1103 次 日期:2014-05-18 00:16:39
溫馨提示:易賢網(wǎng)小編為您整理了“PHP第二節(jié)數(shù)據(jù)類(lèi)型之字符串類(lèi)型”,方便廣大網(wǎng)友查閱!

PHP中一個(gè)字符串可以通過(guò)下面的4種方式來(lái)定義:

單引號(hào)

雙引號(hào)

heredoc語(yǔ)法結(jié)構(gòu)

nowdoc語(yǔ)法結(jié)構(gòu)(自PHP5.3.0以后)

單引號(hào)

定義一個(gè)字符串的最簡(jiǎn)單的方法是用單引號(hào)把它包圍起來(lái)(標(biāo)點(diǎn)符號(hào)')。

如果想要輸出一個(gè)單引號(hào),需在它的前面加個(gè)反斜線(xiàn)(\)。在單引號(hào)前或在字符串的結(jié)尾處想要輸出反斜線(xiàn),輸入兩條(\\)。注意,如果在任何其它的字符前加了反斜線(xiàn),反斜線(xiàn)將會(huì)被直接輸出。

Note:不像雙引號(hào)和heredoc語(yǔ)法結(jié)構(gòu),在單引號(hào)字符串中的變量和特殊含義的字符將不會(huì)被替換。

如果字符串是包圍在雙引號(hào)(")中,PHP將對(duì)一些轉(zhuǎn)義字符進(jìn)行解析,和單引號(hào)字符串一樣,如果輸出轉(zhuǎn)義字符之外的字符,反斜線(xiàn)會(huì)被打印出來(lái)。PHP5.1.1以前,\{$var}中的反斜線(xiàn)還不會(huì)被顯示出來(lái)。

用雙引號(hào)定義的字符串最重要的特征是變量會(huì)被執(zhí)行。

Heredoc結(jié)構(gòu)

第三種定義字符串的方法是用heredoc句法結(jié)構(gòu):<<<。在該提示符后面,要定義個(gè)標(biāo)識(shí)符,然后是一個(gè)新行。接下來(lái)是字符串本身,最后要用前面定義的標(biāo)識(shí)符作為結(jié)束標(biāo)志。

結(jié)束時(shí)所引用的標(biāo)識(shí)符必須在一行的開(kāi)始位置,而且,標(biāo)識(shí)符的命名也要像其它標(biāo)簽一樣遵守PHP的規(guī)則:只能包含字母、數(shù)字和下劃線(xiàn),并且不能用數(shù)字和下劃線(xiàn)作為開(kāi)頭。

Warning要注意的是結(jié)束標(biāo)識(shí)符這行除了可能有一個(gè)分號(hào)(;)外,絕對(duì)不能包括其它字符。這意味著標(biāo)識(shí)符不能縮進(jìn),分號(hào)的前后也不能有任何空白或tabs。更重要的是結(jié)束標(biāo)識(shí)符的前面必須是個(gè)被本地操作系統(tǒng)認(rèn)可的新行標(biāo)簽,比如在UNIX和MacOSX系統(tǒng)中是\n,而結(jié)束標(biāo)識(shí)符(可能有個(gè)分號(hào))的后面也必須跟個(gè)新行標(biāo)簽。

如果不遵守該規(guī)則導(dǎo)致結(jié)束標(biāo)簽不“干凈”,PHP將認(rèn)為它不是結(jié)束標(biāo)識(shí)符而繼續(xù)尋找。如果在文件結(jié)束前也沒(méi)有找到一個(gè)正確的結(jié)束標(biāo)識(shí)符,PHP將會(huì)在最后一行產(chǎn)生一個(gè)句法錯(cuò)誤。

Heredoc結(jié)構(gòu)就象是沒(méi)有使用雙引號(hào)的雙引號(hào)字符串,這就是說(shuō)在heredoc結(jié)構(gòu)中引號(hào)不用被替換,但是上文中列出的字符(\n等)也可使用。變量將被替換,但在heredoc結(jié)構(gòu)中字符串表達(dá)復(fù)雜變量時(shí),要格外小心。

Nowdoc結(jié)構(gòu)

就象heredoc結(jié)構(gòu)類(lèi)似于雙引號(hào)字符串,Nowdoc結(jié)構(gòu)是類(lèi)似于單引號(hào)字符串的。Nowdoc結(jié)構(gòu)很象heredoc結(jié)構(gòu),但是nowdoc不進(jìn)行解析操作。這種結(jié)構(gòu)很適合用在不需要進(jìn)行轉(zhuǎn)義的PHP代碼和其它大段文本。與SGML的<![CDATA[]]>結(jié)構(gòu)是用來(lái)聲明大段的不用解析的文本類(lèi)似,nowdoc結(jié)構(gòu)也有相同的特征。

一個(gè)nowdoc結(jié)構(gòu)也用和heredocs結(jié)構(gòu)一樣的標(biāo)記<<<,但是跟在后面的標(biāo)志符要用單引號(hào)括起來(lái),就像<<<'EOT'這樣。heredocs結(jié)構(gòu)的所有規(guī)則也同樣適用于nowdoc結(jié)構(gòu),尤其是結(jié)束標(biāo)志符的規(guī)則。

變量解析

當(dāng)字符串用雙引號(hào)或heredoc結(jié)構(gòu)定義時(shí),其中的變量將會(huì)被解析。

這里共有兩種語(yǔ)法規(guī)則:一種簡(jiǎn)單規(guī)則,一種復(fù)雜規(guī)則。簡(jiǎn)單的句法規(guī)則是最常用和最方便的,它可以用最少的代碼在一個(gè)字符串中加入變量,數(shù)組值,或?qū)ο髮傩浴?/p>

復(fù)雜的句法規(guī)則是在PHP4以后加入的,被花括號(hào)包圍的表達(dá)式是其明顯標(biāo)記。

簡(jiǎn)單句法規(guī)則

當(dāng)PHP解析器遇到一個(gè)美元符號(hào)($),它會(huì)和其它很多解析器一樣,去盡量形成一個(gè)合法的變量名??梢杂没ɡㄌ?hào)來(lái)明確變量名的界線(xiàn)。

如果想要表達(dá)更復(fù)雜的結(jié)構(gòu),請(qǐng)用復(fù)雜句法規(guī)則。

復(fù)雜句法規(guī)則

復(fù)雜句法規(guī)則不是結(jié)構(gòu)復(fù)雜而命名,而是因?yàn)樗梢允褂脧?fù)雜的表達(dá)式。

任何想用在字符串中標(biāo)量變量,數(shù)組變量或?qū)ο髮傩远伎墒褂眠@種方法。只需簡(jiǎn)單地像在字符串以外的地方那樣寫(xiě)出表達(dá)式,然后用花括號(hào){和}把它括起來(lái)。由于{無(wú)法被轉(zhuǎn)義,只有$要緊挨著{才會(huì)被認(rèn)出來(lái),可以用{\$來(lái)表達(dá){$。

存取和修改字符串中的字符

字符串中的字符可以通過(guò)一個(gè)以0為開(kāi)始的,用類(lèi)似數(shù)組結(jié)構(gòu)中的方括號(hào)包含對(duì)應(yīng)的數(shù)字來(lái)查找和修改,比如$str[42],可以把字符串想像數(shù)組。函數(shù)substr()和substr_replace()可以用來(lái)實(shí)現(xiàn)多于一個(gè)字符的情況。

Warning方括號(hào)中的數(shù)字超出范圍將會(huì)產(chǎn)生空白。非整數(shù)類(lèi)型被轉(zhuǎn)換成整數(shù),非整數(shù)類(lèi)型轉(zhuǎn)變成整數(shù),非法類(lèi)型會(huì)產(chǎn)生一個(gè)E_NOTICE級(jí)別錯(cuò)誤,負(fù)數(shù)在寫(xiě)入時(shí)會(huì)產(chǎn)生一個(gè)E_NOTICE,但讀取的是空字符串。被指定的字符串只有第一個(gè)字符可用,空字符串用指定為空字節(jié)。

有用的函數(shù)和操作符

字符串可以用'.'(點(diǎn))操作符連接起來(lái),注意'+'(加號(hào))操作符沒(méi)有這個(gè)功能。

對(duì)于字符串的操作有很多有用的函數(shù)。

可以參考字符串函數(shù)了解大部分函數(shù),高級(jí)的查找&替換功能可以參考正則表達(dá)式函數(shù)或Perl類(lèi)型的正則表達(dá)式函數(shù)。

另外還有URL字符串的函數(shù),也有加密/解密字符串的函數(shù)。(mcrypt和mhash).

最后,可以參考字符類(lèi)型函數(shù)。

轉(zhuǎn)換成字符串

一個(gè)值可以通過(guò)在其前面加上(string)或用strval()函數(shù)來(lái)轉(zhuǎn)變成字符串。在一個(gè)需要字符串的表達(dá)式中,字符串會(huì)自動(dòng)轉(zhuǎn)變,比如在使用函數(shù)echo或print時(shí),或在一個(gè)變量和一個(gè)字符串進(jìn)行比較時(shí),就會(huì)發(fā)生這種轉(zhuǎn)變類(lèi)型和類(lèi)型轉(zhuǎn)換可以更好的解釋下面的事情,也可參考函數(shù)settype()。

一個(gè)booleanTRUE值被轉(zhuǎn)換成字符串"1"。BooleanFALSE被轉(zhuǎn)換成""(空的字符串)。這種轉(zhuǎn)變可以在boolean和字符串之間往返進(jìn)行。

一個(gè)整數(shù)或浮點(diǎn)數(shù)被轉(zhuǎn)變?yōu)閿?shù)字的字面樣式的字符串(包括浮點(diǎn)數(shù)中的指數(shù)部分),使用指數(shù)計(jì)數(shù)法的浮點(diǎn)數(shù)(4.1E+6)也可轉(zhuǎn)變。

數(shù)組轉(zhuǎn)換成字符串"Array",因此,echo和printc無(wú)法顯示出該數(shù)組的值。如果顯示一個(gè)數(shù)組值,可以用echo$arr['foo']這種結(jié)構(gòu),更多內(nèi)容見(jiàn)下文。

在PHP4中對(duì)象被轉(zhuǎn)換成字符串"Object",為了調(diào)試原因需要打印出對(duì)象的值,方法見(jiàn)正文。為了得到對(duì)象的類(lèi)的名稱(chēng),可以用get_class()函數(shù)。在PHP5中,可以用__toString。

資源總會(huì)被轉(zhuǎn)變成"Resourceid#1"這種結(jié)構(gòu)的字符串,其中的1是PHP分配給該資源的獨(dú)特?cái)?shù)字。不用過(guò)多關(guān)注這種結(jié)構(gòu),它馬上要轉(zhuǎn)變了。為了得到一個(gè)resource類(lèi)型,可以用函數(shù)get_resource_type()。

NULL總是被轉(zhuǎn)變成空的字符串。

如上面所說(shuō)的,直接把數(shù)組,對(duì)象或資源轉(zhuǎn)換成字符串不會(huì)得到超出其自身的更多信息??梢允褂煤瘮?shù)print_r()和var_dump()列出這些類(lèi)型的內(nèi)容。

大部分的PHP值可以轉(zhuǎn)變成字符串s來(lái)長(zhǎng)期儲(chǔ)存,這被稱(chēng)作串行化,可以用函數(shù)serialize()來(lái)實(shí)現(xiàn)。如果PHP引擎設(shè)定支持WDDX,PHP值也可儲(chǔ)存成XML格式。

字符串轉(zhuǎn)變成數(shù)字

當(dāng)一個(gè)字符串被用在了一個(gè)數(shù)字的環(huán)境中,結(jié)果和類(lèi)型如下:

如果字符串沒(méi)有包含'.','e'或'E'并且數(shù)字值符合整數(shù)類(lèi)型的限定(PHP_INT_MAX定義的),這個(gè)字符串可被認(rèn)定是一個(gè)integer,在其它情況下被認(rèn)定為一個(gè)float。

字符串的開(kāi)始部分給定了它的值,如果字符串以合法的數(shù)字開(kāi)始,這個(gè)數(shù)字可直接使用。否則,值就是0(零)。合法數(shù)值由符號(hào),后面跟著一個(gè)或多個(gè)數(shù)字(可能有個(gè)小數(shù)點(diǎn)),再跟著可選的指數(shù)符號(hào)如'e'或'E',后面跟著一個(gè)或多個(gè)數(shù)字。

不要想像在C語(yǔ)言中的那樣,通過(guò)一個(gè)整數(shù)轉(zhuǎn)換得到相應(yīng)字符,使用函數(shù)ord()和chr()實(shí)現(xiàn)ASCII碼和字符間的轉(zhuǎn)換。

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP第二節(jié)數(shù)據(jù)類(lèi)型之字符串類(lèi)型
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話(huà):0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
咨詢(xún)QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)