91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP運算符優先級的案例分析

發布時間:2020-11-04 14:12:54 來源:億速云 閱讀:136 作者:小新 欄目:編程語言

這篇文章主要介紹PHP運算符優先級的案例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

                                                           

今天在老王的技術手冊看到一個問題:

<?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); } expr

最后, 順便說一下, 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運算符優先級的案例分析的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴宁市| 安乡县| 大港区| 天台县| 涟水县| 绵阳市| 章丘市| 盘山县| 精河县| 确山县| 轮台县| 友谊县| 孝昌县| 岳普湖县| 曲阜市| 大埔区| 靖安县| 樟树市| 桑日县| 唐海县| 五寨县| 蒙城县| 闽侯县| 龙南县| 阳信县| 灵璧县| 镇江市| 青龙| 高要市| 正蓝旗| 拜城县| 隆安县| 淳安县| 克拉玛依市| 阜阳市| 文成县| 米林县| 休宁县| 沐川县| 化隆| 海林市|