web-dev-qa-db-ja.com

PHP 7.1 Nullable Default Function Parameter

PHP 7.1では、次の関数が呼び出されたとき:

private function dostuff(?int $limit = 999) { }

そのような構文で:

dostuff(null);

$ limitの値はnullになります。したがって、$limitの値が明示的にnullに設定されたと言えます。これを克服する方法はありますか?つまりnull値(つまり、値の欠如)が検出された場合、暗黙的であるか明示的であるかにかかわらず、デフォルトを使用しますか?

ありがとう

9
mils

いいえPHPには、「nullの場合はデフォルトにフォールバックする」オプションはありません。代わりに次のようにする必要があります。

_private function dostuff(?int $limit = null) {
    // pre-int typehinting I would have done is_numeric($limit) ? $limit : 999;
    $limit = $limit ?? 999;
}
_

あるいは、何かを行うための適切な値がない場合は、dostuff()またはdostuff(999)を実行するようにしてください。

:メソッドパラメータのデフォルト値を取得するためのリフレクションもありますが、多すぎるようです。

ただし、次の方法があります。

_ $m = new ReflectionFunction('dostuff');
 $default = $m->getParameters()[0]->getDefaultValue();
 dostuff($default);
_
19
apokryfos