作者JohnRoyer (日落 Zero)
看板PHP
標題Re: [閒聊] 從PHP7升級到PHP8後 解決count()的錯誤
時間Mon Jul 1 17:41:17 2024
※ 引述《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://webptt.com/m.aspx?n=bbs/PHP/M.1719826881.A.39D.html
1F:推 nightwind209: 感謝您詳細的說明 chatgpt的方法 我就在想$new_Time 07/02 00:13
2F:→ nightwind209: stampTitle原本就不像是countable或array 那就永遠 07/02 00:14
3F:→ nightwind209: 是false 那加上&&不就永遠都false 但我只有理解到這 07/02 00:15
4F:→ nightwind209: 原來A是false後 B就會被忽略不執行 07/02 00:16
5F:推 wintersxp: 翻成中文就短路,讀過電學就能體會 08/09 23:12