我在 php7.4 中有以下代碼,用于從另一個創(chuàng)建日期 $date = clone $regularCourse->getNextCronExecutionDate(); $date->modify('+ 3 days'); $date->setTime($date->format('H'), $date->format('i'), 0, 0);我已經(jīng)在本地和生產(chǎn)中對其進行了測試,并且它曾經(jīng)工作得很好。突然間它開始失敗。與錯誤DateTime::setTime() expects parameter 1 to be int, string given它會定期且可預(yù)測地失敗,因為我的哨兵給了我 4000 次該事件的發(fā)生次數(shù)(這是一個每分鐘運行一次的 cron 任務(wù),哨兵向我顯示過去幾天該錯誤每小時發(fā)生 60 次)但 !現(xiàn)在我已經(jīng)添加了一些調(diào)試來顯示該值,它不再失敗我使用的代碼 // Added to debug some courses failing ob_start(); var_dump($date); $dumped_message= ob_get_clean(); \Sentry\addBreadcrumb( new \Sentry\Breadcrumb( \Sentry\Breadcrumb::LEVEL_INFO, \Sentry\Breadcrumb::TYPE_DEFAULT, 'error_reporting', "course Id " . $regularCourse->getId() ) ); \Sentry\addBreadcrumb( new \Sentry\Breadcrumb( \Sentry\Breadcrumb::LEVEL_INFO, \Sentry\Breadcrumb::TYPE_DEFAULT, 'error_reporting', $dumped_message ) );我不知道 var_dump-ing 變量是否會產(chǎn)生一些副作用?所以我的問題這個錯誤什么時候發(fā)生?為什么我的調(diào)試代碼使問題消失?
1 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
如果您使用,declare(strict_types=1)
則需要注意類型:
DateTime::setTime()需要整數(shù):
public?DateTime::setTime?(?int?$hour?,?int?$minute?[,?int?$second?=?0?[,?int?$microseconds?=?0?]]?)?:?DateTime
DateTime::format()返回字符串:
public?DateTime::format?(?string?$format?)?:?string
在這種情況下,您可以直接轉(zhuǎn)換為 int,盡管這可以輕松掩蓋其他格式錯誤:
declare(strict_types=1);
$date = new \DateTime();
// Correct
$date->setTime((int)$date->format('H'), (int)$date->format('i'), 0, 0);
// Typo, no error thrown becuase `Sunday` casts to 0
$date->setTime((int)$date->format('l'), (int)$date->format('i'), 0, 0);
... 盡管
$date = new \DateTime();
$date->setTime($date->format('l'), $date->format('i'), 0, 0);
// DateTime::setTime() expects parameter 1 to be int, string given
- 1 回答
- 0 關(guān)注
- 206 瀏覽
添加回答
舉報
0/150
提交
取消