国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP學習筆記運算符優先級

2024-05-04 21:57:20
字體:
來源:轉載
供稿:網友

運算符優先級是一個程序員必須了解并且撐握的一個重要的知識點了,下面我們一起來看看PHP運算符優先級文章吧,今天在老王的技術手冊看到一個問題,代碼如下:

<?phpif ($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(&&)之前不存在了規約沖突,實例代碼如下:

  1. expr_without_variable:   
  2. // 有隱規則存在, 相當于T_BOOLEAN_AND成為了"一元操作符".   
  3. |   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;

結合方向

運算符

,

or

xor

and

print

= += -= *= /= .= %= &= |= ^= ~= <<= >>=

? :

||

&&

|

^

&

== != === !==

< <= > >=

<< >>

+ - .

* / %

! ~ ++ -- (int) (float) (string) (array) (object) @

[

new

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平和县| 体育| 宁都县| 比如县| 建水县| 灵川县| 巴彦县| 融水| 楚雄市| 临漳县| 贡山| 景谷| 平昌县| 渝北区| 郧西县| 泰安市| 黄石市| 丰县| 漳平市| 军事| 平湖市| 皮山县| 义马市| 道真| 扎鲁特旗| 井冈山市| 名山县| 麟游县| 鄯善县| 西青区| 营口市| 河间市| 彰武县| 南华县| 南通市| 延吉市| 龙胜| 会泽县| 长治市| 邹城市| 廉江市|