php資料類型之字串

字串就是所有我們可見和不可見的字符,就是我們日常當中說的話,就是我想說:「小明好帥」或「鳳姐,我愛你!」。字串,就是我想表達的一切讓人看到的字元。

例如可以看到的字元:

我願變成童話你,你愛的那個王子,有房有車有票子。 <html><title></title></html> ^@@@#@ my name is xiaoshenyang

以上可見的文字,HTML標籤、特殊字元和英文等等,我們都認為是字串。

註:不可見字符暫時不講解,因為,文本中無法表現,下面的實驗中逐漸注意即可。為了有更清晰的表現,也可以觀看本書配套的PHP學院出品關於字串的影片。

在PHP語言中宣告字串有三種方式:

    1.用單引號宣告

    2.用雙引號宣告

    3.使用字界符宣告(需要輸入非常大段的字串時使用)

1.單引號宣告 

用英文半腳的單引號,將字串包起來

<?php
//声明字符串变量$zhifu

$zhifu = '曾经有操蛋的爱情摆在我面前,我珍惜了。当我得到的时候才感到后悔莫及。如果非要在这段爱情前面加上一段三个字,我愿意说三个字:滚犊子';

//你可以放XAMPP指定的目录下,新建一个文件叫str.php。然后访问一下http://127.0.0.1/str.php试试。会不会显示这句话。

echo $zhifu;

?>

2.雙引號宣告字串
在字串兩邊加雙引號。

<?php
//声明字符串变量$str
$str = "如果非要在滚犊子前面加上一个时间的话我愿意是马上。";

echo $str;
?>

3.字界符宣告
1).變數後面的等號寫三個小於號(<<<) 。
2).然後在<<<後面寫上字元(建議英文大寫字元)。如下例中的:ABC
3).然後換行寫上任意想寫的字元
4).寫完後,頂行。在行最開始處,再寫上<<<後面的字元和分號。如下例中的:ABC;

<?php

$dingjie = <<<ABC
  如果
       非要在这个滚犊子
   前
       面<br />
      加上一段
   <i>距离的话</i>
   我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;
?>

那雙引號和單引號有什麼差別呢?

【重要知識點】PHP面試題中,高機率面試題(建議背誦並實驗三次以上)

    1.雙引號解析變量,但是單引號不解析變數。

    2.在雙引號裡面插入變量,變量後面如果有英文或中文字符,它會把這個字符和變量拼接起來,視為一整個變量。一定要在變          量後面接有特殊字符,例如空格等分開。

    3.如果在雙引號裡面插變數的時候,後面不想有空格,可以拿大括號將變數包起來。

    4.雙引號解析轉義字符,單引號不解析轉義字符。但,單引號能解析\' 和\

    5.單引號效率高於雙引號,盡可能使用單引號

    6.雙號和單引號可以互插! ! !雙引號當中插入單引號,單引號當中插入變量,這個變數會被解析。

    7.神奇的字串拼接膠水-(.)點,用來拼接字串。

    8.我們將定界符宣告字串視為雙引號一樣的功能來看待。

實驗範例

1.雙引號解析變量,但是單引號不解析變數

<?php
//声明变量$shouji
$shouji = '为了苹果手机去卖肾';
//在双引号中放$shouji 然后echo 一下是什么效果呢?
$str = "$shouji 会不会显示呢?";
//输入$str试试
echo $str;
?>

在瀏覽器中打開,運行的結果如下:

QQ截图20161114092822.png

透過上邊的例子,我們發現。雙引號中間的變數夠執行顯示,我們將$str這個字串兩邊的雙引號,改為單引號試試,再看一次執行結果:

QQ截图20161114093040.png

發現$shouji 直接顯示出來了,而不是雙引號的顯示結果。

透過上例,我們證明了:雙引號執行變量,而單引號不執行變數。我們得到一個重要結論:

雙引號需要解析變量,因此雙引號的效率沒有單引號高。我們如果為了更高的效率,我們通常會使用單引號。

2. 在雙引號裡面插入變量,變數後面如果有英文或中文字符,它會把這個字符和變數拼接起來,視為一整個變數。可以在後面接上特殊字符,例如空格等分開。

<?php
$php = 'php中文网';

$str = "$phpaaaa";
//你会发现输出$str,什么都没有在页面中显示
echo $str;
?>

但是,我們在$str 宣告的這個字串中將$huaqiangu 後面接個空格再接aaaa,程式碼如下:

<?php
$php = 'php中文网';
//中间加了空格哟
$str = "$php aaaa";

echo $str;
?>

大家發現執行顯示的結果不再是空白頁面,而是這個頁面有內容了。如下:

QQ截图20161114093257.png

我們把程式碼再改改:

<?php
$php = 'php中文网';
//中间加了空格哟
$str = "$php!aaaa";

echo $str;
?>

大家開啟一次頁面,執行了一次程式碼看看結果是不是變成了:

php中文網!aaaa

因此,證明了我們的第二項觀點。

3. 如果在雙引號裡面插變數的時候,後面不想有空格,可以拿大括號將變數包起來。

那,如果我不想在後面有空格有,有特殊符號,就想直接顯示變數$huaqiangu呢? ——我們的解決方法是用大括號把變數包起來。程式碼如下:

<?php
$php = 'php中文网';
//中间加了空格哟
$str = "{$php}aaaa";

echo $str;
?>

於是,大家會發現花千骨後面沒有了特殊符號,也沒有空格了,達到了我們想要的顯示結果,示範效果如下:

QQ截图20161114093552.png

4. 雙引號解析轉義字符,單引號不解析轉義字符。但,單引號能解析\' 和\

第4個字串的注意事項比較難以觀察,轉義字元有一些,但最常用的有:
\n 回車
\t 縮排

我們來透過實驗先來理解\n和\t是什麼。

<?php
//声明一个字符串,记住是双引号
$string = "每天来PHP中文网\n给梦想\t一个机会";
echo $string;
?>

做這一塊的實驗中有一個注意事項,顯示網頁是看不出來效果的,如下:

QQ截图20161114093510.png

##為什麼看不出來出來\n和\t代表什麼意義,也看不出來雙引號解析了\n和\t呢? ——因為,你沒有點擊滑鼠右鍵查看原始碼。我們來點擊一下,再看看效果。

第一步:顯示網頁原始碼


第二步:查看HTML原始碼顯示的結果:


大家來比較字串變量:

$string = "每天來PHP中文網\n給夢想\t一個機會";

\n在PHP學院的後面,在原始碼裡顯示的結果是跟按了回車鍵一樣的效果。

\t在給夢想和一個機會中間。顯示的結果是有幾個空格的效果。 \t相當於我們在電腦上按了一個tab鍵效果。

但是,我們同樣執行一下上面的程式碼,但是$string雙引號改為用單引號:

<?php
//声明一个字符串,记住是双引号
$string = '每天来PHP中文网\n给梦想\t一个机会';
echo $string;
?>

執行次看看效果:

QQ截图20161114093821.png

你會發現-單引號中間的\t和\n直接顯示出來了,而沒有變成按一次回車鍵和按一次tab鍵後的效果。

因此:

雙引號執行轉義字元而單引號不執行轉義字元。

5. 轉義字元\(反斜線的使用)

如果我們宣告一個變數$beizi ,我們想要在$beizi聲明的雙引號中間加上一個雙引號顯示輸出怎麼辦?

<?php

//要在$beizi的字符串中显示一个双引号怎么办?
$beizi = "多于绝大多数的人出生就是杯具,但是"我们在不断的让人生变为喜剧";

echo $beizi;
?>

如果真如上述所寫程式碼,程式碼會報錯。錯誤結果如下:

因為字串:「多於絕大多數的人出生就是杯具,但是」我們在不斷的讓人生變成喜劇」必須寫在雙引號中間。而雙引號中間還有一個雙引號。一個杯具!可以了。
<?php

//要在$beizi的字符串中显示一个双引号怎么办?
$beizi = "多于绝大多数的人出生就是杯具,但是\"我们在不断的让人生变为喜剧";

echo $beizi;
?>

你可以再執行一下上面的程式碼,發現不再報錯了。同理可推,單引號當中要插入一個單引號顯示出來的時候,也可以在單引號聲明的字符串中的單引號前面加上(反斜線,轉義字符),將單引號的意義(限定字元區間)去掉。

<?php

//要在$beizi的字符串中显示一个双引号怎么办?
$shengyang = 'i\'m xiaoshengyang';

echo  $shengyang;
?>

6. 雙號和單引號可以互插! ! !雙引號當中插入單引號,單引號當中插入變量,這個變數會被解析。

程式碼如下:

<?php

$legend = '猛虎';

$NoAlike = "心有'$legend',细嗅蔷薇";

echo $NoAlike;

?>

執行結果如下:

QQ截图20161114093923.png

## 7. 神奇的字串拼接膠水-(.)點,用來拼接字串。

<?php
$php = 'PHP中文网';
//中间加了空格哟
$str = "{$php}aaaa";

echo $str;
?>

上面這段程式碼是,我們曾經說過雙引號能夠解析變量,有一個問題:

效率沒有純單引號的高

那麼問題1:我想改為效率最高的方式該怎麼辦?

問題2:我有多個字串,要拼接在一聲怎麼辦?

那,我們需要使用到神奇的膠水:(.)點,用來拼接字串。

<?php

$shixi = '大学4年要好好学习<br />';

$buran = '不然连实习的机会都没有<br />';

$mimang = '把别人用来迷茫的时间拿到PHP中文网<br />';

$xuexi = '学习PHP<br />';

//我们可以把字符串全部拼接起来。
echo $shixi . $buran . $mimang . $xuexi;

?>
因此,刚刚的问题一的代码我们可以改为:
<?php
$php = 'PHP中文网';
//中间加了空格哟
$str = $php . 'aaaa';

echo $str;
?>

8. 我們將定界符宣告字串視為雙引號一樣的功能來看待。

<?php

$weilai = '努力才有未来';
$mimang = '迷茫的原因是没有目标';

$dingjie = <<<ABC
  如果
           $weilai
       非要\t在这"个滚"犊子
   前
           '$mimang'
       面<br />
      加上\n一段
   <i>距离的话</i>
   我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;

echo $dingjie;
?>

你可以執行發現$weilai,$mimang,\t\n都可以執行,雙引號單引號都能顯示。這就是定界符的特點。

再宣告一次:字串的宣告每一項都必須記住,非常常用。且面試題出現的機率非常高!


不可見字元:主要是電腦規定的一些特殊符號。例如:回車(\n)、縮排(\t)等。


雙引號執行變量,所以


繼續學習
||
<?php //声明字符串变量$zhifu $zhifu = '曾经有操蛋的爱情摆在我面前,我珍惜了。当我得到的时候才感到后悔莫及。如果非要在这段爱情前面加上一段三个字,我愿意说三个字:滚犊子'; //你可以放XAMPP指定的目录下,新建一个文件叫str.php。然后访问一下http://127.0.0.1/str.php试试。会不会显示这句话。 echo $zhifu; ?>