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

作者: nightwind209 (夜風)   2024-06-25 19:30:35
先感謝shadowjohn與andylamyy板友提供的解法
修改完後問題就解決了,PHP系統也升級到8.2.20了
以下是這次除錯前後的資料整理
作個紀錄當參考
起因
原本在PHP7能運行的count()程式段,在PHP8會報error
Exception: count(): Argument #1 ($value) must be of type Countable|array,
null given X:\\count_demo.php 434
434為if(count($new_TimestampTitle)>0){
報錯原因
因為count()在PHP8需要是array或是countable,否則會報TypeError
在PHP7時期只會跳warning
https://www.php.net/manual/en/function.count.php
範例檔案
https://pastebin.com/GkPQk2q3
解決方案
第一種:先作宣告
於第425行後加上以下兩條
$new_Timestamp = [];
$new_TimestampTitle = [];
第二種:加上is_countable()
將434的if(count($new_TimestampTitle)>0){
改為if (is_countable($new_TimestampTitle) && count($new_TimestampTitle) > 0) {
兩種方式執行在PHP8都不會報錯
第一種是板友的建議
第二種是ChatGPT的建議
至於兩者執行結果有什麼差別我就不懂了@@
感謝各位的協助
作者: p2k (pank)   2024-06-25 22:02:00
Windows + PHP 請留意最近的高風險漏洞 CVE-2024-4577
作者: nightwind209 (夜風)   2024-06-26 06:46:00
也是擔心漏洞問題,才想升級
作者: shadowjohn (轉角遇到愛)   2024-06-26 09:14:00
tblclip_model.php 434 前幾行看看感覺應該不是用 count 要用 mb_strlen 或 strlen 吧?看起來像是只是要算字數
作者: nightwind209 (夜風)   2024-06-26 11:10:00
我把tblclip_model.php 434前後的碼放上去了 謝謝
作者: andylamyy (Andy)   2024-06-26 13:28:00
PHP8 陣列在count前要先宣告$new_TimestampTitle = [];
作者: shadowjohn (轉角遇到愛)   2024-06-26 14:52:00
425 $new_Timestamp = []; $new_TimestampTitle = [];回了,試試:)
作者: nightwind209 (夜風)   2024-06-26 17:33:00
謝謝幾位的建議,我會試試看的,感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com