<div style="height:30px;line-height:30px;background:#f1f1f1;font-weight:bold;font-size:14px;padding:5px 10px;margin-bottom:10px;border-bottom:1px solid #ccc">類型>String字符類型</div>
一個字符串 string 就是由一系列的字符組成,其中每個字符等同于一個字節。這意味著 PHP 只能支持 256 的字符集,因此不支持 Unicode 。詳見字符串類型詳解。
* * * * *
**字符串的四種表達方式:**
~~~
單引號
雙引號
heredoc 語法結構
nowdoc 語法結構(自 PHP 5.3.0 起)
~~~
**1.單引號**
* * * * *
<div class="">
要表達一個單引號自身,需在它的前面加個反斜線(\)來轉義。要表達一個反斜線自身,則用兩個反斜線(\\)。其它任何方式的反斜線都會被當成反斜線本身:也就是說如果想使用其它轉義序列例如 \r 或者 \n,并不代表任何特殊含義,就單純是這兩個字符本身。
**注意:**
1.不像雙引號和 heredoc 語法結構,在單引號字符串中的變量和特殊字符的轉義序列將不會被替換。
2.用雙引號定義的字符串最重要的特征是變量會被解析,雙引號中單引號中變量會被解析。引號中變量末尾應該用空格或者專用字符{}等分割開來。
3.Heredoc 結構, 結束標識符這行除了可能有一個分號(;)外,絕對不能包含其它字符。這意味著標識符不能縮進,分號的前后也不能有任何空白或制表符。更重要的是結束標識符的前面必須是個被本地操作系統認可的換行,比如在 UNIX 和 Mac OS X 系統中是 \n,而結束定界符(可能其后有個分號)之后也必須緊跟一個換行。
~~~
非法:
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
?>
~~~
~~~
合法:
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
~~~
~~~
如果定義了變量跟函數,一下也是合法的。
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
~~~
* * * * *
**2.雙引號**
如果字符串是包圍在雙引號(")中, PHP 將對一些特殊的字符進行解析:
~~~
echo "\n 1"; 在html中輸出1,查看源碼是有空格的。
echo "
1"; 等同于上面;
~~~
* * * * *
#### # Heredoc 結構
第三種表達字符串的方法是用 heredoc 句法結構:<<<。在該運算符之后要提供一個標識符,然后換行。接下來是字符串 string 本身,最后要用前面定義的標識符作為結束標志。
也可以把 Heredoc 結構用在函數參數中來傳遞數據:
Example #3 Heredoc 結構在參數中的示例
~~~
<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
~~~
自 PHP 5.3.0 起還可以在 Heredoc 結構中用雙引號來聲明標識符:
Example #5 在 heredoc 結構中使用雙引號
~~~
<?php
echo <<<"FOOBAR"
Hello World!
FOOBAR;
?>
~~~
* * * * *
**Nowdoc 結構**
就象 heredoc 結構類似于雙引號字符串,Nowdoc 結構是類似于單引號字符串的。Nowdoc 結構很象 heredoc 結構,但是 nowdoc 中不進行解析操作。這種結構很適合用于嵌入 PHP 代碼或其它大段文本而無需對其中的特殊字符進行轉義。與 SGML 的 <![CDATA[ ]]> 結構是用來聲明大段的不用解析的文本類似,nowdoc 結構也有相同的特征。
一個 nowdoc 結構也用和 heredocs 結構一樣的標記 <<<, 但是跟在后面的標識符要用單引號括起來,即 <<<'EOT'。Heredoc 結構的所有規則也同樣適用于 nowdoc 結構,尤其是結束標識符的規則。
常用案例
~~~
<?php
// 顯示所有錯誤
error_reporting(E_ALL);
$great = 'fantastic';
// 無效,輸出: This is { fantastic}
echo "This is { $great}";
// 有效,輸出: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
// 有效
echo "This square is {$square->width}00 centimeters broad.";
// 有效,只有通過花括號語法才能正確解析帶引號的鍵名
echo "This works: {$arr['key']}";
// 有效
echo "This works: {$arr[4][3]}";
// 這是錯誤的表達式,因為就象 $foo[bar] 的格式在字符串以外也是錯的一樣。
// 換句話說,只有在 PHP 能找到常量 foo 的前提下才會正常工作;這里會產生一個
// E_NOTICE (undefined constant) 級別的錯誤。
echo "This is wrong: {$arr[foo][3]}";
// 有效,當在字符串中使用多重數組時,一定要用括號將它括起來
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()}}";
// 無效,輸出: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>
~~~
<div style="background:#f0f0f0;text-align:center;font-size:12px;padding:20p">
? 2017-版權 杜二紅 如要轉載,請注明出處!
</div>