PHPStan Level9(Max)を使ってチェックしているところで、最近になってintval($mixed)のように引数にmixedの型が入った値を入れるとPHPStanでエラーになった。
実際に表示されるエラーはこちら。Level8ではエラーは出ない。
Parameter #1 $value of function intval expects array|bool|float|int|resource|string|null, mixed given.
PHPマニュアルを見てもintval()の第一引数はmixedのはずだが??
https://www.php.net/manual/ja/function.intval.php
2023年4月に入ったこのコミットで、 functionMap.php に定義していたintvalがmixedとしていたところを、scalarに変更されていたのが原因
その翌日のコミットで、 scalarからscalar|array|resource|nullになった。intval以外にもstrval, floatval, doublevalあたりも同様の変更に。
例えばLaravelでRequestクラスからgetで値を取得すると、returnの型がmixedで定義されているため、それをintvalに突っ込んでいたところはPHPStanでエラーとなる。
今回は、filter_var($val, FILTER_VALIDATE_INT); を使った独自関数を定義して回避することにした。