【PHP】&&與and的’別名’關系
作者: 鄭曉 分類: PHP 發(fā)布于: 2013-02-21 12:18 瀏覽:5,441 評論(2)
這個應該是我們新手編程過程中一直忽略的一個細節(jié):
&&、||與AND、OR一樣嗎?它們只是別名關系?
php執(zhí)行源碼時的整個過程為,首先按照zend_language_scanner.l中定義的,將源碼中的echo、if之類的語言結構轉換成類似的T_ECHO、T_IF這些token,并且會去掉源碼中的空格,注釋這些與程序邏輯無關的字符。,就形成了一些簡短的表達式,這就是詞法分析階段。然后會按照zend_vm_opcodes.h中定義的,將這些token轉換為op code。然后一條一行的執(zhí)行這些op code。
上面大概解釋了php的編譯和執(zhí)行的過程,以及語言結構的定義。下面進入正題。
我先坦白,之前我一直以為一樣,以為是純粹的別名關系。但今天看到源碼后,發(fā)現(xiàn)完全是不同的token。拿&&和AND舉例:
還是zend_language_scanner.l
<ST_IN_SCRIPTING>”&&” {
return T_BOOLEAN_AND;
}
<ST_IN_SCRIPTING>”AND” {
return T_LOGICAL_AND;
}
一個叫布爾”與”,一個叫邏輯”與”
之所以使用不同的token。那必然有不同之處。這里我也不賣關子了,google能找到很多答案,其實這兩個最實質的區(qū)別就是優(yōu)先級不同:
$a = 1 && 0;
$b = 1 AND 0;
var_dump($a);
var_dump($b);
前者會嘗試先計算1 && 0,得到結果后再賦給$a,后者會先將1賦給$b;所以結果為
bool(false) int(1)
這下大家應該清楚這里的細節(jié)了,PHP中&&與AND還是存在一定差異的,用的時候需要注意下。
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉載時請注明出處及相應鏈接。
本文永久鏈接: http://yjfs.org.cn/php-and-another-name.html
不光是php里面是的,c語言等其他語言也是有區(qū)別的
嗯,后來查了一下其實就是運算優(yōu)先級的問題…基礎沒學好啊~~~