當前位置:博客首頁>>PHP >> 閱讀正文

【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】&&與and的’別名’關系:目前有2 條留言

用戶評論頭像 三防漆發(fā)表于 2013年02月22日 14:22[回復]

不光是php里面是的,c語言等其他語言也是有區(qū)別的

    用戶評論頭像 鄭曉發(fā)表于 2013年02月22日 14:27[回復]

    嗯,后來查了一下其實就是運算優(yōu)先級的問題…基礎沒學好啊~~~

發(fā)表評論

change vcode