這篇文章主要介紹PHP運(yùn)算符優(yōu)先級(jí)的案例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、黃山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
今天在老王的技術(shù)手冊看到一個(gè)問題:
<?php if ($a = 100 && $b = 200) { var_dump($a, $b); }
輸出是什么?
這個(gè)問題, 咋一看或許覺得簡單, 但其實(shí)仔細(xì)推敲并不簡單,
如果說布爾與之前的部分, 是由于優(yōu)先級(jí)的問題, 但是如果僅僅是優(yōu)先級(jí)的問題的話, 那么結(jié)果應(yīng)該是:
$a = (100 && $b) = 200
而實(shí)際上的結(jié)果, 確實(shí)高優(yōu)先級(jí)的&&讓步給次優(yōu)先級(jí)的=, 讓 $b = 200 先結(jié)合了.
究其原因, 是因?yàn)镻HP并不完全遵守優(yōu)先級(jí)的定義, 這個(gè)在PHP的手冊中也有說明:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
這樣的設(shè)計(jì), 個(gè)人不發(fā)表看法, 反正在C語言中, 這樣類似的語句是判定為語法錯(cuò)的. PHP采用這樣的設(shè)計(jì), 很可能是歷史原因,
有好奇的同學(xué), 會(huì)想知道到底為什么, 之前jayeeliu網(wǎng)友也問過:
laruence你好:
問一個(gè)php運(yùn)算符優(yōu)先級(jí)的問題
$t == 1 && $tt = 2
按照php運(yùn)算符優(yōu)先級(jí)應(yīng)該是
(($t == 1) && $tt) = 2
這個(gè)順序執(zhí)行,但實(shí)際上應(yīng)該是
($t == 1) && ($tt = 2)
我有些不太理解。
其實(shí)也簡單, 運(yùn)算符優(yōu)先級(jí)是在存在二義性文法的時(shí)候的一種規(guī)約規(guī)則選擇的手段, 而PHP的語法分析文件定義中, 卻讓等號(hào)和T_BOOLEAN_AND(&&)之前不存在了規(guī)約沖突:
expr_without_variable: // 有隱規(guī)則存在, 相當(dāng)于T_BOOLEAN_AND成為了"一元操作符". | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr
最后, 順便說一下, PHP對應(yīng)于T_BOOLEAN_AND 還定義了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 這倆個(gè)的優(yōu)先級(jí)都低于等號(hào), 于是就會(huì)有了, 很多PHP入門教材示例代碼中經(jīng)典的:
$result = mysql_query(*) or die(mysql_error());
類似的還可以用or來實(shí)現(xiàn)三元操作符(?:)的功能:
$person = $who or $person = "laruence"; //等同于: $person = empty($who)? "laruence" : $who;
以上是PHP運(yùn)算符優(yōu)先級(jí)的案例分析的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞標(biāo)題:PHP運(yùn)算符優(yōu)先級(jí)的案例分析-創(chuàng)新互聯(lián)
鏈接URL:http://m.rwnh.cn/article18/ddsegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、App開發(fā)、靜態(tài)網(wǎng)站、微信公眾號(hào)、外貿(mào)網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容