0x00 PHP中 ==
與 ===
的區(qū)別
===比較兩個(gè)變量的類型
==只比較他們的值
e.g
比如整數(shù)0和浮點(diǎn)數(shù)0.0
用==比較返回TRUE
用===比較返回FLASE
用代碼測(cè)試
<?php
$str = "0dff";
if (0 == $str) {
echo "true";
}else{
echo "false";
}
?>
上面的這個(gè)程序的輸出結(jié)果是true,也就是說在編譯中程序默認(rèn)0和0dff是相等的仿荆。
這是因?yàn)樵趫?zhí)行關(guān)系運(yùn)算”==“時(shí)要求運(yùn)算符兩邊的數(shù)據(jù)類型必須一致贰您,所以等號(hào)右邊的字符串被強(qiáng)制轉(zhuǎn)換為了整型0。這也是一系列弱類型語言的一個(gè)缺點(diǎn)拢操。
#在php中提供了“===”來解決這個(gè)問題
<?php
$str = "0dff";
if (0 === $str) {
echo "true";
}else{
echo "false";
}
這個(gè)程序的輸出是false
全等于操作過程如下:
1.判斷全等于操作符2邊的數(shù)據(jù)類型是否相同 如果不相同锦亦,則返回false
2.判斷全等于操作符2邊的值是否相等,如果 不相等令境,則返回false
3.最后將上面2步的操作進(jìn)行與操作杠园。返回與操作的結(jié)果
0x01 PHP中 單引號(hào) ' '
與 雙引號(hào) " "
的區(qū)別
雙引號(hào)串中的內(nèi)容可以被解釋而且替換,而單引號(hào)串中的內(nèi)容總被認(rèn)為是普通字符舔庶。
<?php
$parker = 2;
echo "parker is $parker"; // parker is 2
echo 'parker is $parker'; // parker is $parker
echo "parker is $parker\n"; // parker is 2 (同時(shí)換行)
echo 'parker is $parker\n'; // parker is $parker\n
?>
在單引號(hào)串中甚至反斜杠也失去了他的擴(kuò)展含義(除了插入反斜杠\和插入單引號(hào)')抛蚁。
所以,當(dāng)在字串中進(jìn)行變量代換和包含\n(換行符)
等轉(zhuǎn)義序列時(shí)惕橙,應(yīng)該使用雙引號(hào)瞧甩。
單引號(hào)串可以用在其他任何地方,腳本中使用單引號(hào)串處理速度會(huì)更快些弥鹦。
0x02 PHP中 or
與 ||
的區(qū)別
很多人認(rèn)為PHP中 or
和 ||
是可以劃等號(hào)的肚逸,一開始我也是這么認(rèn)為的,但是其實(shí)不是彬坏,它們還是存在一個(gè)優(yōu)先級(jí)的差別朦促。下面通過一個(gè)例子說明它們的差異
<?php
$a = false || true;
$b = false or true;
var_dump($a);//true
echo '<br />';
var_dump($b);//false
?>
執(zhí)行后,$a為true栓始,而$b為false务冕。這是因?yàn)?code>||的優(yōu)先級(jí)大于 =
,先執(zhí)行 false || true
幻赚,然后將執(zhí)行后的結(jié)果true賦值給$a禀忆。而or
的優(yōu)先級(jí)小于=
,先將false賦值給$b坯屿,因此$b就為false