Re: [閒聊] 從PHP7升級到PHP8後 解決count()的錯誤

看板PHP作者 (日落 Zero)時間5月前 (2024/07/01 17:41), 編輯推噓2(203)
留言5則, 2人參與, 4月前最新討論串1/1
※ 引述《nightwind209 (夜風)》之銘言: : 第二種:加上is_countable() : 改為if (is_countable($new_TimestampTitle) && count($new_TimestampTitle) > 0) { is_countable() 函式,會辨別收到的變數是哪一種資料型態 如果資料型態可以使用 count() 則回傳 true 如果資料型態無法被 count() 使用則回傳 false 單純在 count() 之前,做一次資料型態檢查而已 再來看一下這二個條件被放在 if() 中會發生的事情 語法很長,這邊先來整理、縮短一下 條件 A:is_countable($new_TimestampTitle) 條件 B:count($new_TimestampTitle) ChatGPT 給的範例整理後為:if (A && B) 要讓 if 中的條件為 true,則 A 必須為 true 且 B 也必須為 true 若 A 或是 B 其中一個為 false,則 if() 必定會得到 false 這邊要提到一個常見程式語言的特性叫做「short circuit」 (不建議翻譯成中文,文意應該會不同) 意思是會自動判斷是否需要執行所有給定的條件判斷 上述範例為 && (AND) ,必須 A 和 B 二個條件都是 true 結果才會是 true 若遇到一個不可數的資料型態導致 A 條件為 false PHP 知道在 A 為 false 的型況中,B 不管是 true 還是 false,AND 的結果都是 false 所以 B 的判斷式會自動忽略不執行 相反的,若多個條件使用 || (OR) 合在一起判斷,只要第一個條件為 true 結果 就一定為 true,因此第一個條件確定是 true 以後,後面的條件式就都不執行了 以下寫個簡單的範例 $x = 0; if (true && ($x += 10) { } echo $x; // x => 10 $x = 0; if (false && ($x += 10) { } echo $x; // x => 0 // 這邊換成使用 OR $x = 0; if (true || ($x += 10)) { } echo $x; // x => 0 $x = 0; if (false || ($x += 10)) { } echo $x; // x => 10 備註:因為要讓大家能快速了解 short curcuit 才會在判斷中加上運算,是不好的寫法 如果你希望以後還有同事一起寫 code 的話,請不要在條件判斷中放奇怪的東西 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.133.56 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1719826881.A.39D.html

07/02 00:13, 5月前 , 1F
感謝您詳細的說明 chatgpt的方法 我就在想$new_Time
07/02 00:13, 1F

07/02 00:14, 5月前 , 2F
stampTitle原本就不像是countable或array 那就永遠
07/02 00:14, 2F

07/02 00:15, 5月前 , 3F
是false 那加上&&不就永遠都false 但我只有理解到這
07/02 00:15, 3F

07/02 00:16, 5月前 , 4F
原來A是false後 B就會被忽略不執行
07/02 00:16, 4F

08/09 23:12, 4月前 , 5F
翻成中文就短路,讀過電學就能體會
08/09 23:12, 5F
文章代碼(AID): #1cWdd1ET (PHP)
文章代碼(AID): #1cWdd1ET (PHP)