PHP 第二節(jié) 數(shù)據(jù)類型之字符串類型
Jun 13, 2016 pm 12:01 PM
PHP中一個字符串可以通過下面的4種方式來定義:
- 單引號
- 雙引號
- heredoc 語法結(jié)構(gòu)
- nowdoc 語法結(jié)構(gòu) (自PHP 5.3.0以后)
單引號
定義一個字符串 的最簡單的方法是用單引號把它包圍起來 (標(biāo)點(diǎn)符號 ')。
如果想要輸出一個單引號,需在它的前面加個反斜線 (\)。在單引號前或在字符串的結(jié)尾處 想要輸出反斜線,輸入兩條 (\\)。注意,如果在任何其它的字符前加了反斜線,反斜線將會被直接輸出。
Note: 不像雙引號 和heredoc語法結(jié)構(gòu), 在單引號字符串中的變量 和特殊含義的字符將不會被替換。
如果字符串是包圍在雙引號(")中, PHP將對一些轉(zhuǎn)義字符進(jìn)行解析,和單引號字符串一樣, 如果輸出轉(zhuǎn)義字符之外的字符,反斜線會被打印出來。 PHP5.1.1以前,\{$var} 中的反斜線還不會被顯示出來。
用雙引號定義的 字符串最重要的特征是變量會被執(zhí)行。
Heredoc結(jié)構(gòu)
第三種定義字符串的方法是用heredoc句法結(jié)構(gòu):。在該提示 符后面,要定義個標(biāo)識符,然后是一個新行。接下來是字符串本身,最后要用前面定義的標(biāo)識符作為結(jié)束標(biāo)志。
結(jié)束時所引用的標(biāo)識符必須在一行的開始位置, 而且,標(biāo)識符的命名也要像其它標(biāo)簽一樣遵守PHP的規(guī)則:只能包含 字母、數(shù)字和下劃線,并且不能用數(shù)字和下劃線作為開頭。
Warning要注意的是結(jié)束標(biāo)識符這行除了 可能有一個分號(;)外,絕對不能包括 其它字符。這意味著標(biāo)識符不能縮進(jìn),分號的前后也不能有任何空白或tabs。更重要的是結(jié)束標(biāo)識符的前面必須是個被本地 操作系統(tǒng)認(rèn)可的新行標(biāo)簽,比如在UNIX和Mac OS X系統(tǒng)中是\n ,而結(jié)束標(biāo)識符(可能有個分號)的后面也必須跟個 新行標(biāo)簽。
如果不遵守該規(guī)則導(dǎo)致結(jié)束標(biāo)簽不“干凈”,PHP將認(rèn)為它不是結(jié)束標(biāo)識符而繼續(xù)尋找。如果在文件結(jié)束前也沒有找到一個正確的結(jié)束標(biāo)識符,PHP將會在最后一 行產(chǎn)生一個句法錯誤。
Heredoc結(jié)構(gòu)就象是沒有使用雙引號的雙引號字符串, 這就是說在heredoc結(jié)構(gòu)中引號不用被替換,但是上文中列出的字符 (\n等)也可使用。 變量將被替換,但在heredoc結(jié)構(gòu)中字符串表達(dá)復(fù)雜變量時,要格外小心。
Nowdoc結(jié)構(gòu)
就象heredoc結(jié)構(gòu)類似于雙引號字符串,Nowdoc結(jié)構(gòu)是類似于單引號字符串的。Nowdoc結(jié)構(gòu)很象heredoc結(jié)構(gòu),但是 nowdoc不進(jìn)行解析操作 。 這種結(jié)構(gòu)很適合用在不需要進(jìn)行轉(zhuǎn)義的PHP代碼和其它大段文本。與SGML的 結(jié)構(gòu)是用來聲明大段的不用解析的文本類似,nowdoc結(jié)構(gòu)也有相同的特征。
一個nowdoc結(jié)構(gòu)也用和heredocs結(jié)構(gòu)一樣的標(biāo)記 , 但是跟在后面的標(biāo)志符要用 單引號括起來,就像這樣。heredocs結(jié)構(gòu)的所有規(guī)則也同樣適用于nowdoc結(jié) 構(gòu),尤其是結(jié)束標(biāo)志符的規(guī)則。
變量解析
當(dāng)字符串用雙引號或heredoc結(jié)構(gòu)定義時,其中的變 量將會被解析。
這里共有兩種語法規(guī)則:一種簡單 規(guī)則,一種復(fù)雜規(guī) 則。簡單的句法規(guī)則是最常用和最方便的, 它可以用最少的代碼在一個字符串中加入變量, 數(shù)組 值,或 對象屬性。
復(fù)雜的句法規(guī)則是在PHP4以后加入的,被花括號包圍的表達(dá)式是其明顯標(biāo)記。
簡單句法規(guī)則
當(dāng)PHP解析器遇到一個美元符號 ($) , 它會和其它很多解析器一樣,去盡量形成一個合法的變量名??梢杂没ɡ?號來明確變量名的界線。
?
如果想要表達(dá)更復(fù)雜的結(jié)構(gòu),請用復(fù)雜句法規(guī)則。
?
復(fù)雜句法規(guī)則
?
復(fù)雜句法規(guī)則不是結(jié)構(gòu)復(fù)雜而命名,而是因?yàn)樗梢允褂脧?fù)雜的表達(dá)式。
任何想用在字符串中標(biāo)量變量,數(shù)組變量或?qū)ο髮傩远伎墒褂眠@種方法。 只需簡單地像在字符串以外的地方那樣寫出表達(dá)式, 然后用花括號{和 }把它括起來。 由于 { 無法被轉(zhuǎn)義,只有 $ 要緊挨著 {才會被認(rèn)出來,可以用 {\$ 來表達(dá) {$。
?
存取和修改字符串中的字符
?
字符串中的字符可以通過一個以0為開始的,用類似數(shù)組結(jié)構(gòu)中的方括號包含對應(yīng)的數(shù)字來查找和修改,比如 $str[42], 可以把 字符串想像數(shù)組 。 函數(shù) substr() 和 substr_replace()可以用來實(shí)現(xiàn)多于一個字符 的情況。
?
E_NOTICE
級別錯誤,負(fù)數(shù)在寫入時會產(chǎn)生一個E_NOTICE
,但讀 取的是空字符串。被指定的字符串只有第一個字符可用,空字符串用指定為空字節(jié)。?
有用的函數(shù)和操作符
字符串可以用'.' (點(diǎn)) 操作符連接起來, 注意 '+' (加號) 操作符沒有 這個功能。?
對于字符串的操作有很多有用的函數(shù)。
可以參考 字符串函數(shù) 了解大部分函數(shù), 高級的查找&替換功能可以參考 正則表達(dá)式函數(shù) 或 Perl類型的正則 表達(dá)式函數(shù)。
另外還有URL字符串的函數(shù), 也有加密/解密字符串的函數(shù)。 (mcrypt 和 mhash).
最后,可以參考 字符類型函數(shù)。
?
轉(zhuǎn)換成字符串
?
一個值可以通過在其前面加上(string)或用strval()函數(shù)來轉(zhuǎn)變成 字符串。 在一個需要字符串的表達(dá)式中,字符串會自動轉(zhuǎn)變,比如在使用函數(shù) echo 或 print 時, 或在一個變量和一個 字符串 進(jìn)行比較時,就會發(fā)生這種轉(zhuǎn)變 類型 和 類型轉(zhuǎn)換 可以更好的解釋下面的事情,也可參考函 數(shù) settype() 。
?
一個boolean TRUE
值被轉(zhuǎn)換成 字符串"1"。 Boolean FALSE
被轉(zhuǎn)換成"" (空的字符串)。 這種轉(zhuǎn)變可以在 boolean 和 字符串 之間往返進(jìn)行。
?
一個 整數(shù) 或 浮點(diǎn)數(shù) 被轉(zhuǎn)變?yōu)閿?shù)字的字面樣式的字符串 (包括 浮點(diǎn)數(shù)中的指數(shù)部分),使用指數(shù)計數(shù)法的浮點(diǎn)數(shù) (4.1E+6)也可轉(zhuǎn)變。
數(shù)組轉(zhuǎn)換成 字符串 "Array",因此, echo 和 print c無法顯示出該數(shù)組的值。如果顯示一個數(shù)組值,可以用 echo $arr['foo']這種結(jié)構(gòu),更多內(nèi)容見下文。
在PHP 4中對象被轉(zhuǎn)換成 字符串 "Object", 為了調(diào)試原因需要打印出對象的值,方法見正文。為了得到對象的類的名稱,可以用 get_class() 函數(shù)。 在PHP5中, 可以用 __toString 。
資源總會被轉(zhuǎn)變成"Resource id #1"這種結(jié)構(gòu)的字符串 , 其中的 1 是PHP分配給該資源的獨(dú)特數(shù)字。不用過多關(guān)注這種結(jié)構(gòu),它馬上要轉(zhuǎn)變了。為了得到一個 resource類型,可以用函數(shù) get_resource_type()。
NULL
總是被轉(zhuǎn)變成空的字符串。
如上面所說的,直接把數(shù)組, 對象或 資源 轉(zhuǎn)換成 字符串 不會得到超出其自身的更多信息??梢允褂煤瘮?shù) print_r() 和 var_dump() 列出這些類型的內(nèi)容。
大部分的PHP值可以轉(zhuǎn)變成 字符串s 來長期儲存,這被稱作串行化,可以用函數(shù) serialize() 來實(shí)現(xiàn)。 如果PHP引擎設(shè)定支持 WDDX , PHP值也可儲存成XML格式。
字符串轉(zhuǎn)變成數(shù)字
當(dāng)一個字符串被用在了一個數(shù)字的環(huán)境中,結(jié)果和類型如下:
如果字符串沒有包含 '.','e'或'E' 并且數(shù)字值符合整數(shù)類型的限定 ( PHP_INT_MAX
定義的), 這個 字符串 可被認(rèn)定是一個 integer, 在其它情況下被認(rèn)定為一個float。
字符串的開始部分給定了它的值,如果 字符串 以合法的數(shù)字開始,這個數(shù)字可直接使用。 否則,值就是 0 (零)。 合法數(shù)值由符號,后面跟著一個或多個數(shù)字(可能有個小數(shù)點(diǎn)),再跟著可選的指數(shù)符號如'e' 或 'E',后面跟著一個或多個數(shù)字。
不要想像在C語言中的那樣,通過一個整數(shù)轉(zhuǎn)換得到相應(yīng)字符,使用函數(shù) ord() 和 chr() 實(shí)現(xiàn)ASCII碼和字符間的轉(zhuǎn)換。

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ?? ??? ??? ?? JavaScript? MediareCorder API? ?? PHP ???? ???? ?????. 2. PHP? ???? ?? ??? ???? STTAPI (? : Google ?? Baidu ?? ??)? ???? ???? ?????. 3. PHP? ???? AI ??? (? : OpenAigpt)? ????. 4. ?? ?? PHP? TTSAPI (? : Baidu ?? Google ?? ??)? ???? ??? ?? ??? ?????. 5. PHP? ?? ??? ??? ??? ??? ?? ?? ??? ?????. ?? ????? PHP? ?? ???? ?? ?? ?? ??? ??? ?????.

PHP?? ?? ?? ??? ???? ?? ??? ? ???? ?? ??? ???? ?? ??? ???? ???? ????. 1. ?? ?? ??? ?? ??? URL ? ?? ??? ????. 2. UrlenCode? ???? ?? ??? ???????. 3. ? ???? ????? ?? ?? ??? ? ?? ??? ?????. 4. ???? ???? ?? ? ? ??? ??? ??? ??? ?????. 5. ??? ?? ??? ????? ?? ????? OG ??? ???? ?????. 6. XSS ??? ???? ?? ??? ??? ?????. ? ???? ??? ??? ???? ??? ?? ?? ??? ??? ???? ??? ?? ??? ?????.

AI? ??? ??? ?? ?? ? ?? ???? ????? ?? ??? ??????. 1. Baidu, Tencent API ?? ?? ?? NLP ?????? ?? ??? AI ?? ?? API? ??????. 2. PHP? ? ?? guzzle? ?? API? ???? ?? ??? ??????. 3. ?? ????? ?? ?? ??? ???? ???? ???? ??? ??? ? ????. 4. ?? ?? ? ?? ???? ?? PHP-L ? PHP_CODESNIFFER? ??????. 5. ???? ????? ???? ?? ?? ??? ?????? ??? ??????. AIAPI? ??? ? ???, ?? ??, ?? ? PHP ?? ??? ??? ???. ?? ???? PSR ??? ???, ??? ????? ????, ?? ??? ???, ????? ??? ????, X? ???????.

1. ?? ???? ??? ??? ?????? ?? ?? ??? ??, ??? ?? ???? ??? (? : ?? ???, ? ? ??), ?? ??? ?? ???? ???? ? ?? ?? ??? ??? ?? ??? ????????. 2. ?? ??? ??? ?? ? ??? ???? ?? ?? ?? ???? ?? ? ?? AUDIT ?? ??? ??? ? ????? ????? ??? ???????. 3. ?? ?? ??? ?? ??? ???????. Recaptchav3 ???? ??, ??? ?? ?? ?? ?? ??, IP ? ?? ??? ??? ??? ?? ???? ??? ?? ??? ????? ??? ???? ????? ??? ?????.

PHP? AI ??? ??? ?? ????? ??? API? ?? ?????. ??? ??? ????? ? ??? ???? ?????. API ??? ?? ?? ??? ???? ??? ??? ???? ???? ? ????. 2. ?? ?? ???? guzzle ?? curl? ???? HTTP ??? ???, JSON ??? ??? ? ???, API ? ?? ??, ??? ? ?? ??? ???? ??, ??? ?? ?? ? ? ?? ????, ??? ?? ? ?????? ?????. 3. ???? ???? ?? ???? API ??, ?? ? ??? ?? ??, ??? ?? ??, ?? ?? ? ??? ??? ??? ?????. ?? ??? ??? ??? ? ??? ???? Propt ?? ? ?? ?? ??, ??? ?? ? ?? ????, ?? ?? ?? ???? ? ??? ?? ? ???? ????? ?????.

PHP? ?????? ????? ?? ?? ?? ???? ???? ?? ???? ???? ?? ?? ???? ?????. 2. ?? ??? ???? ???? ?? ??? ?? ? ??? ??? ???? ?? API/Webhook ??? ??? ?? ???? ??? ??? ??? ??? ?????. 3. ?? ????? ?? ??, ??/???? ????, ???? ??, ???? ? ??? ?????? ????? ?? ??? ???? ???? ?? Dingtalk, SMS ?? ??? ???? ??? ?????? ???? ?? ? ??? ??? ????? ?? ??? ???? ???????.

PhpisstillRelevantinmodernenterpriseenvironments.1. Modernphp (7.xand8.x)? ??? ??, ??? ??, jitcompilation ? modernsyntax, mateitsuilableforlarge-scalepplications

MAC ?? ???? ? ??? ?? ??? ????? ?? ? ??? ????? ????. 1. ???? ???? ???? ???? ??? ?? ? ?? ????? ??? ???? ??????. 2. ????? ?? ?? ? ??? ???? ???? ?? ?? ????? ??? ???? ?????. 3. ??? ?? ??? ???? ?? ???? ?? ???? ?? ???? ?? ? ? ????. 4. ??? ????? ????? ? ?? ?? ? ??? ?? ? ??? ??????.
