PHP v7 で型を指定した関数を書いていて true / false の仮引数にとる関数を作ってたら予期しないエラーになって?🤔🤔🤔 となってしまったのでメモ
環境
- PHP 7.4
型指定した関数を呼び出したらエラーになった
<?php function my_func(boolean $is_filter = false): array { … }
=> Fatal error: Default value for parameters with a class type can only be NULL in …
true / false を取る仮引数の型は boolean ではなく bool
スカラー型(
bool,int,float,string) のエイリアスはサポートされていません。 つまり、これらはクラスやインターフェイスの名前として扱われているということです。 たとえば、型の宣言にbooleanを使った場合、 値がbooleanクラスまたはインターフェイスのインスタンスであることが要求されます。 bool 型ではありません。
cf. PHP: 型宣言 - Manual
boolean 型は Boolean クラスのインスタンスを指すので、スカラー値である true / false だと型エラーになるという事だった
true / false を指すのは bool 型なので型定義は bool にしなければならなかった
正しい関数の型定義
<?php - function my_func(boolean $is_filter = false): array { … } + function my_func(bool $is_filter = false): array { … }
PHP の型定義むずぃ…
おわり
[参考]
おとなりに銀河のアニメ楽しみ!
