基本介紹
字符串 string
由一系列的字符組成,每個字符等于一個字節。
PHP中的字符串只支持256
的字符集,因此不支持Unicode
。
一個字符串最大可以達到2GB
。
多個字符串通過小數點.
拼接,而不是加號+
。
字符串并無特定的編碼,而是根據腳本文件的編碼方式來編碼。
語法介紹
字符串支持四種語法,分別是單引號、雙引號、heredoc
、nowdoc
。
-
單引號
echo '輸出單引號:\',需要使用斜杠。'; echo '輸出斜杠:\\,也需要使用斜杠。'; echo '無法輸出轉義字符,如\r,如\n等會被原樣輸出。'; echo '無法輸出變量,如$varname。';
-
雙引號
echo "輸出雙引號和斜杠的方法和上例一樣:\"和\\"; echo "可以輸出一些轉義字符,如\t制表符"; echo "可以輸出變量,如$varname";
-
Heredoc
語法上由<<<
三個小于號加一個開始標識符和一個結束標識符組成,這兩個標識符必須相同,且結束標識符必須獨占一行,首尾不能有其他內容。
功能上如同雙引號一樣,能在里面解析變量,但格式非常令人蛋疼。<?php $string = <<<TOKEN <h1>你好啊,我是劉德華。</h1> TOKEN; class Example{ public $foo; public $bar; function __construct($f, $b){ $this->foo = $f; $this->bar = $b; } } $exam = new Example('iGuoji', ['abc', 'xyz', '123']); echo <<<TOKEN 自我介紹: $string <p>我的英文名叫做:$exam->foo</p> <p>我有一個數組:{$exam->bar[0]}</p> TOKEN; # 記住,結束標識符還不能是最后一行
Nowdoc
語法上和Heredoc
一樣,區別只是開始標識符必須用單引號包裹,而且其內容和單引號的字符串一樣,內容不會被解析。
變量解析
在雙引號和Heredoc
的語法結構中可以使用變量、對象等內容,因此在一些復雜的輸出中會常常用到大括號{}
(界定符),一組界定符代表一個表達式,如該界定符外有$
符號,則該表達式將返回一個變量名,詳情參考 可變變量。
- 普通變量
$name = "iGuoji"; echo " <p> 第一種:$name </p> <p> 第二種:{$name} ,我用到了界定符</p> <p> 第三種:${name} ,先返回字符串'name',然后$和`name`拼接 </p> <p> 第四種:{${name}} </p> ";
- 普通數組
$array = ['Laravel', 'Yii', 'ThinkPHP']; echo " <p> 第一種:$array[0] </p> <p> 第二種:{$array[1]} </p> <p> 第三種:${array[2]} </p> <p> 第三種情況是界定符中先返回字符串'array[2]',然后再和$拼接 </p> ";
- 普通函數(更容易理解界定符和可變參數)
$name = "iGuoji"; function hello(){ return "name"; } echo <<<TOKEN <p> 第一種:${hello()} </p> <p> 第二種:{${hello()}} </p> TOKEN;
- 對象屬性
$guoji = 'Hello World'; class Example{ public static $foobar = "guoji"; public $foo; public $bar; public function __construct(string $f, array $b = []){ $this->foo = $f; $this->bar = $b; } public function say(){ return static::$foobar; } } $exam = new Example('Laravel', ['Yii', 'Ci', 'Yar']); echo <<<TOKEN <p> 對象屬性:$exam->foo : {$exam->foo} </p> <p> 對象數組:{$exam->bar[0]} </p> <p> 對象函數:{$exam->say()} </p> <p> 靜態屬性:${Example::$foobar} </p> TOKEN;
注意:
函數、方法、靜態類變量、類常量只有在PHP的新版本里才可以在{$}
中使用,而且得到的也將只是一個變量名,參考上例中${Example::$foobar}
語句。
修改存取
字符串的修改讀取可以直接使用=
賦值運算符,也可以如數組一樣使用索引操作,其原因是字符串本質上是一個由字節組成的數組。
-
讀取操作
// 定義字符串 $string = 'Laravel'; // 正確的方法 echo '完整字符串:' . $string . '<br/>'; echo '整體長度:' . strlen($string) . '<br/>'; echo '第一個字符:' . $string[0] . '<br/>'; echo '第二個字符:' . $string{1} . '<br/>'; echo '第三個字符:' . $string['2'] . '<br/>'; echo '最后一個字符:' . $string[-1] . '<br/>'; echo '倒數第二個字符:' . $string[-2] . '<br/>'; // 對于不存在的索引,PHP將發出Notice通知 echo '第N個字符:' . $string[10] . '<br/>'; // 對于錯誤的索引,PHP將發布Warning警告 echo '錯誤的索引:' . $string['abc'] . '<br/>'; echo '錯誤的索引:' . $string[true] . '<br/>';
-
修改操作
// 定義字符串 $string = 'Laravel'; echo '完整字符串:' . $string . '<br/>'; // 修改第一個字符 $string[0] = 'F'; echo $string . '<br />'; // 換一種方式修改 $string{0} = 'G'; echo $string . '<br />'; // 修改成多個字符 $string{0} = 'Hello'; echo $string . '<br />'; // 修改最后一個字符 $string[-1] = 's'; echo $string . '<br />'; // 看看長度 echo '長度:' . strlen($string) . '<br />'; // 修改不存在的索引,將會拉長字符串長度,并以空格填充空位 $string[10] = '!'; echo $string . '<br />'; // 看看長度 echo '長度:' . strlen($string) . '<br />';
類型轉換
可以在變量的前面加上(string)
或用strval()
函數來轉成字符串。
- 布爾值會將
TRUE
轉成字符串'1'
,FALSE
轉成''
空字符串 - 整數型或浮點型會被轉成字符串形式的數值
- 數組總是轉換成字符串
'Array'
- 對象通常會轉換成字符串
'Object'
,通過toString()
方法更改 - 資源類總會被轉成
'Resource id #1'
這種結構的字符串 -
NULL
總是被轉成''
空字符串