Code Day's Night

ichikawayのブログ

PHPStan レベル9でintvalのmixed givenエラーが出る

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に変更されていたのが原因

github.com

その翌日のコミットで、 scalarからscalar|array|resource|nullになった。intval以外にもstrval, floatval, doublevalあたりも同様の変更に。

github.com

 

例えばLaravelでRequestクラスからgetで値を取得すると、returnの型がmixedで定義されているため、それをintvalに突っ込んでいたところはPHPStanでエラーとなる。

今回は、filter_var($val, FILTER_VALIDATE_INT); を使った独自関数を定義して回避することにした。