日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

<?php
if ($a = 100 && $b = 200) {
 var_dump($a, $b);
}

輸出是什么?

這個問題, 咋一看或許覺得簡單, 但其實仔細推敲并不簡單,

如果說布爾與之前的部分, 是由于優先級的問題, 但是如果僅僅是優先級的問題的話, 那么結果應該是:

$a = (100 && $b) = 200

而實際上的結果, 確實高優先級的&&讓步給次優先級的=, 讓 $b = 200 先結合了.

究其原因, 是因為PHP并不完全遵守優先級的定義, 這個在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.

這樣的設計, 個人不發表看法, 反正在C語言中, 這樣類似的語句是判定為語法錯的. PHP采用這樣的設計, 很可能是歷史原因,

有好奇的同學, 會想知道到底為什么, 之前jayeeliu網友也問過:

laruence你好:

問一個php運算符優先級的問題

$t == 1 && $tt = 2

按照php運算符優先級應該是

(($t == 1) && $tt) = 2

這個順序執行,但實際上應該是

($t == 1) && ($tt = 2)

我有些不太理解。

其實也簡單, 運算符優先級是在存在二義性文法的時候的一種規約規則選擇的手段, 而PHP的語法分析文件定義中, 卻讓等號和T_BOOLEAN_AND(&&)之前不存在了規約沖突:

expr_without_variable:
 // 有隱規則存在, 相當于T_BOOLEAN_AND成為了"一元操作符".
 | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } exp

最后, 順便說一下, PHP對應于T_BOOLEAN_AND 還定義了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 這倆個的優先級都低于等號, 于是就會有了, 很多PHP入門教材示例代碼中經典的:

$result = MySQL_query(*) or die(mysql_error());

類似的還可以用or來實現三元操作符(?:)的功能:

 $person = $who or $person = "laruence";
//等同于:
 $person = empty($who)? "laruence" : $who;

分享到:
標簽:運算符 PHP
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定