字串
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"
?>