1.4 String 字符串

基本介紹

字符串 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)成''空字符串
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慎皱,一起剝皮案震驚了整個濱河市老虫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茫多,老刑警劉巖祈匙,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異天揖,居然都是意外死亡夺欲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門今膊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來些阅,“玉大人,你說我怎么就攤上這事斑唬∑嗣迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵赖钞,是天一觀的道長。 經(jīng)常有香客問我聘裁,道長雪营,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任衡便,我火速辦了婚禮献起,結(jié)果婚禮上洋访,老公的妹妹穿的比我還像新娘。我一直安慰自己谴餐,他們只是感情好姻政,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岂嗓,像睡著了一般汁展。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厌殉,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天食绿,我揣著相機(jī)與錄音,去河邊找鬼公罕。 笑死器紧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楼眷。 我是一名探鬼主播铲汪,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罐柳!你這毒婦竟也來了掌腰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤硝清,失蹤者是張志新(化名)和其女友劉穎辅斟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芦拿,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡士飒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔗崎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酵幕。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缓苛,靈堂內(nèi)的尸體忽然破棺而出芳撒,到底是詐尸還是另有隱情,我是刑警寧澤未桥,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布笔刹,位于F島的核電站,受9級特大地震影響冬耿,放射性物質(zhì)發(fā)生泄漏舌菜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一亦镶、第九天 我趴在偏房一處隱蔽的房頂上張望日月。 院中可真熱鬧袱瓮,春花似錦、人聲如沸爱咬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽精拟。三九已至燎斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間串前,已是汗流浹背瘫里。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荡碾,地道東北人谨读。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坛吁,于是被迫代替她去往敵國和親劳殖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容