我们正在升级我们的laravel项目,它包括从php7到php8的语言升级。考虑以下代码:
$a = new stdClass()
count($a)
将导致:
// php7
==> 1
// php8
==> TypeError count(): Argument #1 ($value) must be of type Countable|array
现在我们的应用程序相当大,有很多小的碎片,count被用在很多地方,它可能不应该被使用。我基本上都了解了,但理想情况下,我想有某种退路。有没有一种方法可以在laravel应用程序中全局覆盖内置的count函数,希望能像这样做:
// very general pseudocode
function newCount($foo) {
try {
return count($foo);
} except {
\Log::warning('used count on non Countable|array')
return 1;
}
}
然后以某种方式绑定它:
// anywhere in the app code
count($a) // ==> will call newCount($a) instead
1条答案
按热度按时间hwamh0ep1#
你有多种方法来实现这一点,使用一些第三方扩展,一种方法是使用uopz,它允许你挂钩到一个预定义的函数并编辑它的行为。
另一种方法是使用一些静态代码分析器--比如PHPStan--或者任何其他的替代方法,来轻松地扫描和更新你的代码。