PHP 8:如何避免将不可数的值传递给count函数时的致命错误?

pbpqsu0x  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(166)

所以我升级到PHP 8并运行我的脚本,这给了我这个错误:
致命错误:未捕获的类型错误:count():参数#1($value)必须是可计数类型|数组,在C:\xampp\htdocs\app\includes\functions\create_session.php中给定了空值。
堆栈追踪:
(508)您访问的页面不存在!会话-〉检查子功能访问(22,0)
第78行,在C中抛出了#1 {main}
这是由于PHP 8中的一个新的更新,不允许在count函数中使用非数组值,并抛出一个致命的错误,停止进一步的脚本执行。例如,如果你有一个$_POST['checkboxes_checked'],你做count($_POST['checkboxes_checked']),它会给予上面的错误,因为默认情况下它不认为它是一个数组。要修复这个错误,你可以:count((array)$_POST['checkboxes_checked'])),它修复了该问题。
但是,在我的例子中,问题是我有几百个文件需要修复这个问题,我不想进入每个文件并修复这个问题,因为这将是非常耗时的。有没有办法配置PHP 8忽略这个问题,并仍然继续使用这些$_POST参数的count函数?或者某种搜索/替换regex,我可以运行的所有文件,替换count($_POST['some_parameter_name'])count((array)$_POST['some_parameter_name']))?老实说,我不知道我如何可以修复这个问题,而不手动进入每个文件,这是我需要你的帮助的部分。

jhkqcmku

jhkqcmku1#

一个临时的解决方案是定义您自己的count()函数。例如:

/**
 * @deprecated Temporary solution for count() TypeError on invalid countables
 */

function oldCount($input)
{
   return isset($input) && is_array($input) ? count($input) : 0;
}

这只是一个简单的例子,你最好使用(array)前缀。
现在,您需要做的就是将代码中出现的所有count(替换为oldCount(,这样就完成了。

**警告:**这只是一个临时的解决方案。每次使用它都需要一个额外的函数调用,PHP 8没有引入更严格的无理由的:它是为了保护您。请尽快更新您的代码。

相关问题