本文小編為大家詳細(xì)介紹“php字符串的定義方式有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“php字符串的定義方式有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到沐川網(wǎng)站設(shè)計(jì)與沐川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋沐川地區(qū)。
有4種定義方式:1、用單引號(hào)包裹字符,語(yǔ)法“'字符內(nèi)容'”;2、用雙引號(hào)包裹字符,語(yǔ)法“"字符內(nèi)容"”;3、用heredoc結(jié)構(gòu),語(yǔ)法“<<<EOF 字符內(nèi)容 EOF;”;4、用nowdoc結(jié)構(gòu),語(yǔ)法“<<<'EOD' 字符內(nèi)容 EOD;”。Nowdoc和heredoc類(lèi)似,但它中不進(jìn)行變量解析操作;這種結(jié)構(gòu)很適合用于嵌入PHP代碼或其它大段文本而無(wú)需對(duì)其中的特殊字符進(jìn)行轉(zhuǎn)義。
本教程操作環(huán)境:windows7系統(tǒng)、PHP8.1版、DELL G3電腦
字符串是連續(xù)的字符序列,在其它語(yǔ)言中,字符和字符串是兩種不同的數(shù)據(jù)類(lèi)型,但在 PHP 中,統(tǒng)一將字符和字符串當(dāng)作字符串?dāng)?shù)據(jù)類(lèi)型。
在 PHP 中,定義字符串有4種方式,分別是單引號(hào)方式、雙引號(hào)方式、Heredoc 方式、nowdoc 方式。
“單引號(hào)”定義方式
定義一個(gè)字符串的最簡(jiǎn)單的方法是用單引號(hào)把它包圍起來(lái)(字符 ')。
要表達(dá)一個(gè)單引號(hào)自身,需在它的前面加個(gè)反斜線(xiàn)(\)來(lái)轉(zhuǎn)義。要表達(dá)一個(gè)反斜線(xiàn)自身,則用兩個(gè)反斜線(xiàn)(\\)。其它任何方式的反斜線(xiàn)都會(huì)被當(dāng)成反斜線(xiàn)本身:也就是說(shuō)如果想使用其它轉(zhuǎn)義序列例如 \r 或者 \n,并不代表任何特殊含義,就單純是這兩個(gè)字符本身。
注意: 不像雙引號(hào)和 heredoc 語(yǔ)法結(jié)構(gòu),在單引號(hào)字符串中的變量和特殊字符的轉(zhuǎn)義序列將不會(huì)被替換。
示例:
<?php echo 'this is a simple string'; echo '<br>'; // 可以錄入多行 echo 'You can also have embedded newlines in strings this way as it is okay to do'; echo '<br>'; // 輸出: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"'; echo '<br>'; // 輸出: You deleted C:\*.*? echo 'You deleted C:\\*.*?'; echo '<br>'; // 輸出: You deleted C:\*.*? echo 'You deleted C:\*.*?'; echo '<br>'; // 輸出: This will not expand: \n a newline echo 'This will not expand: \n a newline'; echo '<br>'; // 輸出: Variables do not $expand $either echo 'Variables do not $expand $either'; echo '<br>'; ?>
“雙引號(hào)”定義方式
如果字符串是包圍在雙引號(hào)(")中, PHP 將對(duì)以下特殊的字符進(jìn)行解析:
序列 | 含義 |
---|---|
\n | 換行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r | 回車(chē)(ASCII 字符集中的 CR 或 0x0D (13)) |
\t | 水平制表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v | 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11)) |
\e | Escape(ASCII 字符集中的 ESC 或 0x1B (27)) |
\f | 換頁(yè)(ASCII 字符集中的 FF 或 0x0C (12)) |
\\ | 反斜線(xiàn) |
\$ | 美元標(biāo)記 |
\" | 雙引號(hào) |
\[0-7]{1,3} | 符合該正則表達(dá)式序列的是一個(gè)以八進(jìn)制方式來(lái)表達(dá)的字符,which silently overflows to fit in a byte (e.g. "\400" === "\000") |
\x[0-9A-Fa-f]{1,2} | 符合該正則表達(dá)式序列的是一個(gè)以十六進(jìn)制方式來(lái)表達(dá)的字符 |
\u{[0-9A-Fa-f]+} | 匹配正則表達(dá)式的字符序列是 unicode 碼位, 該碼位能作為 UTF-8 的表達(dá)方式輸出字符串 |
和單引號(hào)字符串一樣,轉(zhuǎn)義任何其它字符都會(huì)導(dǎo)致反斜線(xiàn)被顯示出來(lái)。
用雙引號(hào)定義的字符串最重要的特征是變量會(huì)被解析,即變量解析。
示例:
<?php echo "this is a simple string"; echo "<br>"; // 也可以錄入多行 echo "You can also have embedded newlines in strings this way as it is okay to do"; ?>
“Heredoc”定義方式
第三種表達(dá)字符串的方法是用 heredoc 句法結(jié)構(gòu):<<<。在該運(yùn)算符之后要提供一個(gè)標(biāo)識(shí)符,然后換行。接下來(lái)是字符串 string 本身,最后要用前面定義的標(biāo)識(shí)符作為結(jié)束標(biāo)志。
結(jié)束標(biāo)識(shí)符可以使用空格或制表符(tab)縮進(jìn),此時(shí)文檔字符串會(huì)刪除所有縮進(jìn)。 在 PHP 7.3.0 之前的版本中,結(jié)束時(shí)所引用的標(biāo)識(shí)符必須在該行的第一列。
而且,標(biāo)識(shí)符的命名也要像其它標(biāo)簽一樣遵守 PHP 的規(guī)則:只能包含字母、數(shù)字和下劃線(xiàn),并且必須以字母和下劃線(xiàn)作為開(kāi)頭。
<?php $str = <<<EOF url: http://www.chinadenli.net/ EOF; echo $str; ?>
PHP 7.3.0 之后的基礎(chǔ) Heredoc 示例
<?php // 無(wú)縮進(jìn) echo <<<END a b c \n END; // 4 空格縮進(jìn) echo <<<END a b c END;
如果結(jié)束標(biāo)識(shí)符的縮進(jìn)超過(guò)內(nèi)容的任何一行的縮進(jìn),則將拋出 ParseError 異常:
示例:結(jié)束標(biāo)識(shí)符的縮進(jìn)不能超過(guò)正文的任何一行
<?php echo <<<END a b c END;
以上例程在 PHP 7.3 中的輸出:
PHP Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
制表符也可以縮進(jìn)結(jié)束標(biāo)識(shí)符,但是,關(guān)于縮進(jìn)結(jié)束標(biāo)識(shí)符和內(nèi)容, 制表符和空格不能混合使用。在以上任何情況下, 將會(huì)拋出 ParseError 異常。 之所以包含這些空白限制,是因?yàn)榛旌现票矸涂崭駚?lái)縮進(jìn)不利于易讀性。
示例:內(nèi)容(空白)和結(jié)束標(biāo)識(shí)符的不同縮進(jìn)
<?php // 以下所有代碼都不起作用。 // 正文(空格)和結(jié)束標(biāo)記(制表符),不同的縮進(jìn) { echo <<<END a END; } // 在正文中混合空格和制表符 { echo <<<END a END; } // 在結(jié)束標(biāo)記中混合空格和制表符 { echo <<<END a END; }
以上例程在 PHP 7.3 中的輸出:
PHP Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
內(nèi)容字符串的結(jié)束標(biāo)識(shí)符后面不需要跟分號(hào)或者換行符。 例如,從 PHP 7.3.0 開(kāi)始允許以下代碼:
示例:在結(jié)束標(biāo)識(shí)符后繼續(xù)表達(dá)式
<?php $values = [<<<END a b c END, 'd e f']; var_dump($values);
以上例程在 PHP 7.3 中的輸出:
array(2) { [0] => string(11) "a b c" [1] => string(5) "d e f" }
“Nowdoc”定義方式
就象 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)很適合用于嵌入 PHP 代碼或其它大段文本而無(wú)需對(duì)其中的特殊字符進(jìn)行轉(zhuǎn)義。與 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)識(shí)符要用單引號(hào)括起來(lái),即 <<<'EOT'。Heredoc 結(jié)構(gòu)的所有規(guī)則也同樣適用于 nowdoc 結(jié)構(gòu),尤其是結(jié)束標(biāo)識(shí)符的規(guī)則。
示例:
<?php echo <<<'EOD' Example of string spanning multiple lines using nowdoc syntax. Backslashes are always treated literally, e.g. \\ and \'. EOD;
<?php /* 含有變量的更復(fù)雜的示例 */ class foo { public $foo; public $bar; function __construct() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<<'EOT' My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': \x41 EOT; ?>
注意:
Nowdoc 結(jié)構(gòu)是在 PHP 5.3.0 中加入的。
擴(kuò)展知識(shí):變量解析
當(dāng)字符串用雙引號(hào)或 heredoc 結(jié)構(gòu)定義時(shí),其中的變量將會(huì)被解析。
這里共有兩種語(yǔ)法規(guī)則:一種簡(jiǎn)單規(guī)則,一種復(fù)雜規(guī)則。簡(jiǎn)單的語(yǔ)法規(guī)則是最常用和最方便的,它可以用最少的代碼在一個(gè) string 中嵌入一個(gè)變量,一個(gè) array 的值,或一個(gè) object 的屬性。
復(fù)雜規(guī)則語(yǔ)法的顯著標(biāo)記是用花括號(hào)包圍的表達(dá)式。
簡(jiǎn)單語(yǔ)法
當(dāng) PHP 解析器遇到一個(gè)美元符號(hào)($)時(shí),它會(huì)和其它很多解析器一樣,去組合盡量多的標(biāo)識(shí)以形成一個(gè)合法的變量名。可以用花括號(hào)來(lái)明確變量名的界線(xiàn)。
<?php $juice = "apple"; echo "He drank some $juice juice.".PHP_EOL; // Invalid. "s" is a valid character for a variable name, but the variable is $juice. echo "He drank some juice made of $juices."; // Valid. Explicitly specify the end of the variable name by enclosing it in braces: echo "He drank some juice made of ${juice}s."; ?>
類(lèi)似的,一個(gè) array 索引或一個(gè) object 屬性也可被解析。數(shù)組索引要用方括號(hào)(])來(lái)表示索引結(jié)束的邊際,對(duì)象屬性則是和上述的變量規(guī)則相同。
<?php $juices = array("apple", "orange", "koolaid1" => "purple"); echo "He drank some $juices[0] juice.".PHP_EOL; echo "He drank some $juices[1] juice.".PHP_EOL; echo "He drank some $juices[koolaid1] juice.".PHP_EOL; class people { public $john = "John Smith"; public $jane = "Jane Smith"; public $robert = "Robert Paulsen"; public $smith = "Smith"; } $people = new people(); echo "$people->john drank some $juices[0] juice.".PHP_EOL; echo "$people->john then said hello to $people->jane.".PHP_EOL; echo "$people->john's wife greeted $people->robert.".PHP_EOL; echo "$people->robert greeted the two $people->smiths."; // Won't work ?>
從 PHP 7.1.0 起,還支持負(fù)數(shù)字索引。
<?php $string = 'string'; echo "The character at index -2 is $string[-2].", PHP_EOL; $string[-3] = 'o'; echo "Changing the character at index -3 to o gives $string.", PHP_EOL; ?>
如果想要表達(dá)更復(fù)雜的結(jié)構(gòu),請(qǐng)用復(fù)雜語(yǔ)法。
復(fù)雜(花括號(hào))語(yǔ)法
復(fù)雜語(yǔ)法不是因?yàn)槠湔Z(yǔ)法復(fù)雜而得名,而是因?yàn)樗梢允褂脧?fù)雜的表達(dá)式。
任何具有 string 表達(dá)的標(biāo)量變量,數(shù)組單元或?qū)ο髮傩远伎墒褂么苏Z(yǔ)法。 表達(dá)式的書(shū)寫(xiě)方式與在 string 以外的方式相同, 然后用花括號(hào) { 和 } 把它括起來(lái)即可。由于 { 無(wú)法被轉(zhuǎn)義,只有 $ 緊挨著 { 時(shí)才會(huì)被識(shí)別。可以用 {\$ 來(lái)表達(dá) {$。下面的示例可以更好的解釋?zhuān)?/p>
<?php // 顯示所有錯(cuò)誤 error_reporting(E_ALL); $great = 'fantastic'; // 無(wú)效,輸出: This is { fantastic} echo "This is { $great}"; // 有效,輸出: This is fantastic echo "This is {$great}"; // 有效 echo "This square is {$square->width}00 centimeters broad."; // 有效,只有通過(guò)花括號(hào)語(yǔ)法才能正確解析帶引號(hào)的鍵名 echo "This works: {$arr['key']}"; // 有效 echo "This works: {$arr[4][3]}"; // 這是錯(cuò)誤的表達(dá)式,因?yàn)榫拖?nbsp;$foo[bar] 的格式在字符串以外也是錯(cuò)的一樣。 // 換句話(huà)說(shuō),只有在 PHP 能找到常量 foo 的前提下才會(huì)正常工作;這里會(huì)產(chǎn)生一個(gè) // E_NOTICE (undefined constant) 級(jí)別的錯(cuò)誤。 echo "This is wrong: {$arr[foo][3]}"; // 有效,當(dāng)在字符串中使用多重?cái)?shù)組時(shí),一定要用括號(hào)將它括起來(lái) echo "This works: {$arr['foo'][3]}"; // 有效 echo "This works: " . $arr['foo'][3]; echo "This works too: {$obj->values[3]->name}"; echo "This is the value of the var named $name: {${$name}}"; echo "This is the value of the var named by the return value of getName(): {${getName()}}"; echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; // 無(wú)效,輸出: This is the return value of getName(): {getName()} echo "This is the return value of getName(): {getName()}"; // 無(wú)效, 輸出: C:\folder\{fantastic}.txt echo "C:\folder\{$great}.txt" // 有效, 輸出: C:\folder\fantastic.txt echo "C:\\folder\\{$great}.txt" ?>
也可以在字符串中用此語(yǔ)法通過(guò)變量來(lái)調(diào)用類(lèi)的屬性。
<?php class foo { var $bar = 'I am bar.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo "{$foo->$bar}\n"; echo "{$foo->{$baz[1]}}\n"; ?>
注意:
函數(shù)、方法、靜態(tài)類(lèi)變量和類(lèi)常量可使用 {$} ,在該字符串被定義的命名空間中將其值作為變量名來(lái)訪問(wèn)。只單一使用花括號(hào) ({}) 無(wú)法處理從函數(shù)或方法的返回值或者類(lèi)常量以及類(lèi)靜態(tài)變量的值。
讀到這里,這篇“php字符串的定義方式有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱(chēng):php字符串的定義方式有哪些
分享網(wǎng)址:http://www.chinadenli.net/article48/jcochp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)