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 の型定義むずぃ…
おわり
[参考]
おとなりに銀河のアニメ楽しみ!