2009-10-21 18 views
6

はそれが強力なデータ型付けバグ

public function nullify(bool $force=FALSE); 

として定義されたインタフェース内のメソッドのために「のみ NULLにすることができますクラス型ヒントを使用してパラメータのためのデフォルト値」エラーを取得するには正常ですか?

私はそれがオブジェクトではなくブールである必要があり、デフォルトでは偽です。

+2

これはphp7で動作するはずです –

答えて

10

phpのブール型パラメータのヒントはありません(まだ)。クラス名またはarrayしか指定できません。 したがってfunction foo(bool $b)は、「パラメータ$ bはクラス 'bool'またはnull」のインスタンスでなければなりません。

http://docs.php.net/language.oop5.typehinting

機能について(関数のプロトタイプでクラスの名前を指定することによって)オブジェクトまたは(PHP 5.1以降)配列されるパラメータを強制することができます。
3

PHP 5のタイプヒントは、特定のクラス(またはそのサブクラスの1つ)または配列に限定されています。他のスカラー型は指定できません。

5

すでに述べたように、ヒントのタイプは配列とオブジェクトに対してのみ機能します。あなたの関数は次のように書くことができます:

public function nullify($force=FALSE){ 
    $force=(bool)$force; 
    //further stuff 
} 
+1

不適切なパラメータの "キャッチ可能な致命的なエラー" phpに近づくには、false === is_bool($ force)の場合はuser_errorを発生させるか例外をスローします。 – VolkerK

1

パラメータをブール値に強制することはできません。

language.oop5.typehintingのように:

PHP 5では、タイプヒントが導入されています。関数は、パラメータをオブジェクト[...]、インタフェース、配列(PHP 5.1以降)または呼び出し可能(PHP 5.4以降)にすることができるようになりました。

[...]

タイプはは、intまたは文字列としてスカラー型で使用することはできませんヒント。 [...]

そしてlanguage.types.introに見られるような、PHPのスカラー型は、次のとおりです。

 
- boolean 
- integer 
- float (floating-point number, aka double) 
- string 
0

あなたは試みることができる:あなたがアップグレードするまで

public function nullify($force){ 
    if(is_object($force)) $force = false; 
    ... 
} 

は一時的な解決策として、それを考えてみましょうPHP。

関連する問題