字串
PHP裡面的字串寫法一共有4種
- 單引號
' - 雙引號
" - Heredoc
- Nowdoc(PHP 5.3.0後支援)
單引號
以兩個單引號'包夾一段文字,表示字串內容
使用單引號的字串有一些特徵如下(與雙引號比較):
- 單引號中的跳脫字元(Escape characters)只有兩種。
| 跳脫字元 | 說明 |
|---|---|
| \' | 單引號 |
| \ | 反斜線 |
- 跳脫字元
\\可省略寫作\,但不可為最後一個字元 - 不會對字串中的變數進行解析。
跳脫字元是為了能輸入某些打不出來的字,而定義的一種輸入方式
舉例來說,這邊以單引號'當作字串的包夾符號,那麼想在字串中使用'怎麼辦呢?
所以定義了跳脫字元,讓字串中能使用\'表示單引號'
看一下範例囉
<?php
echo '基本用法'; //基本用法
echo 'You can also have embedded
newlines in strings'; //You can also have embedded newlines in strings
echo 'Eric\'s book.'; // Eric's book.
echo 'C:\\TEST'; // C:\TEST
echo 'C:\TEST'; // C:\TEST
// 不能在最後省略,\'會被解析為字元而缺少結尾單引號
//echo 'C:\PHP\'; // Parse error
echo '這串字不會\n換行'; //這串字不會\n換行
$text = 'hello';
echo 'text is $text'; // text is $text
?>
在PHP中如果要輸出純文字字串,而且不需要經過轉換特殊字元的動作的話
由於單引號的效能比較好(不用判斷是否有變數要輸出),建議都使用單引號'
雙引號
以兩個雙引號"包夾一段文字,表示字串內容
最主要的重點是,變數會在雙引號中被解析。
在雙引號中使用變數的寫法有三種:
- 直接使用:
"$var" - 使用大括號(1):
"${var}" - 使用大括號(2):
"{$var}"
雙引號的逸出字元如下:
| 符號 | 說明 |
|---|---|
| \n | 換行字元(LF or 0x0A)。 |
| \r | 歸位字元(CR or 0x0D)。 |
| \t | 水平Tab字元(HT or 0x09)。 |
| \v | 垂直tab字元(VT or 0x0B, PHP 5.2.5之後加入)。 |
| \f | 跳頁字元(CR or 0x0C, PHP 5.2.5之後加入)。 |
| \ | 反斜線字元。 |
| $ | 錢號字元。 |
| \" | 雙引號字元。 |
一樣,看看範例~
<?php
echo "\"You're a good man.\" she said."; // "You're a good man." she said.
echo "C:\\PHP"; // C:\PHP
echo "First line\nsecond line\nAthird line";
// output:
// First line
// second line
// third line
$text = "hello";
//直接使用變數
echo "text is $text"; // text is hello
//使用大括號(1)
echo "text is ${text}"; // text is hello
//使用大括號(2)
echo "text is {$text}"; // text is hello
echo "text is \$text"; // text is $text
?>
Heredoc
這種方式適用於字串內容很多的時候,其實作用跟雙引號差不多
最主要的差別是可以在Heredoc裡面自由地使用",不需要再加上反斜線\
Heredoc使用<<<符號開始,後面接著一個自訂的標籤,最後以自訂的標籤作結束,而結束的自訂標籤左邊不能有任何空白。
<?php
$text="hello";
// 標籤之後不能有任何字元
$content=<<<EOT
這個句子可以自由地使用"和'
並且可以輸出變數$text
也可以換行繼續打字
要輸出錢號要這樣\$
EOT;
// 標籤之前與分號之後不能有任何字元
echo $content;
//output:這個句子可以自由地使用"和' 並且可以輸出變數hello 也可以換行繼續打字 要輸出錢號要這樣$
?>
Nowdoc
如果說heredoc是對應雙引號,那麼nowdoc就是對應單引號
Nowdoc使用<<<符號開始,後面接著一個使用單引號包夾的自訂標籤,最後以自訂的標籤作結束。
Nowdoc無法使用逸出字元,也不會解析變數,也就是純文字的內容。
<?php
$text="hello";
// 標籤之後不能有任何字元
$content=<<<'EOT'
這個句子可以自由地使用"和'
並且可以輸出變數$text
也可以換行繼續打字
要輸出錢號要這樣\$
EOT;
// 標籤之前與分號之後不能有任何字元
echo $content;
//output:這個句子可以自由地使用"和' 並且可以輸出變數$text 也可以換行繼續打字 要輸出錢號要這樣\$
?>
PHP5.3.0之後,相對於Nowdoc的單引號,Heredoc同時新增了使用雙引號包夾的用法。
其他資料型別強制轉型成字串
在PHP內使用strval()、(string)可以將其他型別強制轉型成字串
<?php
$num = 12345;
$string = strval($num); //使用函數強制轉型
$string = (string)$num;
//這邊強制轉型後$string內儲存的值是"12345"
?>