かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP Boolean の型指定にハマる

PHP v7 で型を指定した関数を書いていて true / false の仮引数にとる関数を作ってたら予期しないエラーになって?🤔🤔🤔 となってしまったのでメモ

環境

型指定した関数を呼び出したらエラーになった

<?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 の型定義むずぃ…
おわり


[参考]

おとなりに銀河のアニメ楽しみ!