基本介紹
字符串 string
由一系列的字符組成,每個字符等于一個字節(jié)格带。
PHP中的字符串只支持256
的字符集撤缴,因此不支持Unicode
。
一個字符串最大可以達(dá)到2GB
叽唱。
多個字符串通過小數(shù)點.
拼接屈呕,而不是加號+
。
字符串并無特定的編碼棺亭,而是根據(jù)腳本文件的編碼方式來編碼虎眨。
語法介紹
字符串支持四種語法,分別是單引號、雙引號嗽桩、heredoc
岳守、nowdoc
。
-
單引號
echo '輸出單引號:\'碌冶,需要使用斜杠湿痢。'; echo '輸出斜杠:\\,也需要使用斜杠扑庞。'; echo '無法輸出轉(zhuǎn)義字符譬重,如\r,如\n等會被原樣輸出罐氨。'; echo '無法輸出變量臀规,如$varname。';
-
雙引號
echo "輸出雙引號和斜杠的方法和上例一樣:\"和\\"; echo "可以輸出一些轉(zhuǎn)義字符岂昭,如\t制表符"; echo "可以輸出變量以现,如$varname";
-
Heredoc
語法上由<<<
三個小于號加一個開始標(biāo)識符和一個結(jié)束標(biāo)識符組成,這兩個標(biāo)識符必須相同约啊,且結(jié)束標(biāo)識符必須獨占一行邑遏,首尾不能有其他內(nèi)容。
功能上如同雙引號一樣恰矩,能在里面解析變量记盒,但格式非常令人蛋疼。<?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>我有一個數(shù)組:{$exam->bar[0]}</p> TOKEN; # 記住,結(jié)束標(biāo)識符還不能是最后一行
Nowdoc
語法上和Heredoc
一樣萎胰,區(qū)別只是開始標(biāo)識符必須用單引號包裹碾盟,而且其內(nèi)容和單引號的字符串一樣,內(nèi)容不會被解析技竟。
變量解析
在雙引號和Heredoc
的語法結(jié)構(gòu)中可以使用變量冰肴、對象等內(nèi)容,因此在一些復(fù)雜的輸出中會常常用到大括號{}
(界定符)榔组,一組界定符代表一個表達(dá)式熙尉,如該界定符外有$
符號,則該表達(dá)式將返回一個變量名搓扯,詳情參考 可變變量检痰。
- 普通變量
$name = "iGuoji"; echo " <p> 第一種:$name </p> <p> 第二種:{$name} ,我用到了界定符</p> <p> 第三種:${name} 锨推,先返回字符串'name'铅歼,然后$和`name`拼接 </p> <p> 第四種:{${name}} </p> ";
- 普通數(shù)組
$array = ['Laravel', 'Yii', 'ThinkPHP']; echo " <p> 第一種:$array[0] </p> <p> 第二種:{$array[1]} </p> <p> 第三種:${array[2]} </p> <p> 第三種情況是界定符中先返回字符串'array[2]'公壤,然后再和$拼接 </p> ";
- 普通函數(shù)(更容易理解界定符和可變參數(shù))
$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> 對象數(shù)組:{$exam->bar[0]} </p> <p> 對象函數(shù):{$exam->say()} </p> <p> 靜態(tài)屬性:${Example::$foobar} </p> TOKEN;
注意:
函數(shù)、方法谭贪、靜態(tài)類變量境钟、類常量只有在PHP的新版本里才可以在{$}
中使用,而且得到的也將只是一個變量名俭识,參考上例中${Example::$foobar}
語句慨削。
修改存取
字符串的修改讀取可以直接使用=
賦值運算符,也可以如數(shù)組一樣使用索引操作套媚,其原因是字符串本質(zhì)上是一個由字節(jié)組成的數(shù)組缚态。
-
讀取操作
// 定義字符串 $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 '倒數(shù)第二個字符:' . $string[-2] . '<br/>'; // 對于不存在的索引,PHP將發(fā)出Notice通知 echo '第N個字符:' . $string[10] . '<br/>'; // 對于錯誤的索引堤瘤,PHP將發(fā)布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 />';
類型轉(zhuǎn)換
可以在變量的前面加上(string)
或用strval()
函數(shù)來轉(zhuǎn)成字符串本辐。
- 布爾值會將
TRUE
轉(zhuǎn)成字符串'1'
桥帆,FALSE
轉(zhuǎn)成''
空字符串 - 整數(shù)型或浮點型會被轉(zhuǎn)成字符串形式的數(shù)值
- 數(shù)組總是轉(zhuǎn)換成字符串
'Array'
- 對象通常會轉(zhuǎn)換成字符串
'Object'
,通過toString()
方法更改 - 資源類總會被轉(zhuǎn)成
'Resource id #1'
這種結(jié)構(gòu)的字符串 -
NULL
總是被轉(zhuǎn)成''
空字符串