php總結
基礎知識總結 一: 關於php中單引號 雙引號 花括弧 問題總結
在php 中 字串可以用 單引號 也可以用雙引號 引起來表示,輸出等。
例如:
Php代碼
<?php echo "aabbcc"; echo 'aabbcc'; ?>
他們的輸出是一樣的。都會列印出 aabbcc
但是 如果將aabbcc 賦值給一個變數,那麼它又該如何輸出呢?
Php代碼
<?php $a = "aabbcc";//或者$a='aabbcc'; echo $a; echo "$a"; //在這裡你會發現 他們的輸出都是 aabbcc //如果是輸出並且斷行符號呢 echo $a."\n"; echo "$a\n"; //這兩種方式都是可以的。輸出都是aabbcc 為什麼呢, ?>
是因為“”雙引號 在php中有解釋的功能,它會去解釋這個字串 如果字串中有變數或者逸出字元 它會一併解釋了 在進行輸出 。而單引號沒有解釋功能,也就是說,當你 echo ‘$a’; 或者echo '\n'; 它只會當作字串輸出 $a \n 並不會輸出你所想要的解釋好的變數或者轉移字元。
什麼是解釋功能? 其實這僅僅是,如果你用雙引號輸出字串的時候,系統會去正則的匹配$符號,從而識別變數。逸出字元也是。。。
針對上面轉義那一塊的情況還有一種情況。我們分別輸出 ‘ 單引號 和 雙引號 “
Php代碼
echo '\''; echo "'"; //雙引號括住單引號,避免了再去用\ 轉義 echo "\""; echo '"'; //針對雙引號,單引號有了避免了轉義的操作。
所以,通過上面的解釋,我們就可以認定為,當我們只是輸出字串的時候,不存在需要解釋的東西的時候,我們應該直接用 ‘’ 單引號 這樣可以省略一個解釋的過程, 在運行速度上雖然看不到明顯的提升,但是原理上運行效率是高於用雙引號的。 當我們輸出的內容需要解釋時,我們可以用“” 雙引號。 例如 echo "aaaaa$a"; 輸出為 aaaaaaabbcc
在這裡發生了一個問題。 請看代碼
Php代碼
$res = 'xxx'; //第一步 echo "aaa$resbbbb"; //第二步 //這樣,php在解析過程中,會當作$resbbbb 是一個變數,自然就會報錯, //如何規避這樣的情況呢。 echo “aaa{$res}bbbb”; //第三步
第二步 筆者其實是想要 變數 $res。但是擷取到的是$resbbbb ,
因為zend解析的時候用的是正則匹配。並不知道你只想要res 。正則識別的是變數,只要是變數的字元(_字元數字,並且不是數字開頭),那麼系統正則就會一直匹配。如果有空格 那麼變數識別自然到此為止。$ 和 空格 之間的就是變數名。(當然這裡的空格 只要不是變數命名規範的字元就行)
echo “aaa$res bbbb”; 這句話就會運行正常,只不過輸出的字串中多了一個空格。
筆者 不想要 多餘的這個空格呢?
那麼就用第三步的代碼 echo "aaa{$res}bbbb";
這樣寫,zend解析的時候,同樣是正則找到兩個花括弧。 {}中的字元會再此使用正常雙引號的正則匹配。 從而直接找到$res . 而花括弧不會輸出
假如說 花括弧中是{aaa $res} 呢?即: echo "aaa{ggg $res}bbbb"; 也就是 花括弧中不僅僅只有變數 或者 不是變數。
這個時候,系統會重新判斷將整個字串用雙引號的正則去解析尋找變數。此時,res 後面的 “}” 不屬於變數命名。
所以 上面的輸出 將會是: aaa{ggg xxx}bbbb
總結: 當字串和變數拼接輸出的時候。 運行效率較高的是 {} 括住變數。當然{}中不要有非變數,不然將會比 用 “” 直接引起來慢。