web-dev-qa-db-ja.com

PHP:boolとboolean型のヒント

私はPHPでより多くの型ヒントを使用しようとしています。今日、私はデフォルトのパラメータでブール値をとる関数を書いていましたが、フォームの関数

function foo(boolean $bar = false) {
    var_dump($bar);
}

実際に致命的なエラーをスローします:

クラスタイプのヒントを持つパラメーターのデフォルト値はNULLのみです

同様の形式の関数

function foo(bool $bar = false) {
    var_dump($bar);
}

ではない。ただし、両方

var_dump((bool) $bar);
var_dump((boolean) $bar);

まったく同じ出力を与える

:boolean false

どうしてこれなの?これはJavaのラッパークラスに似ていますか?

43
Jimmy P

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

警告
上記のスカラー型のエイリアスはサポートされていません。代わりに、クラス名またはインターフェイス名として扱われます。たとえば、ブール値をパラメータまたは戻り値の型として使用するには、bool型ではなく、クラスまたはインターフェイスのブール値のインスタンスである引数または戻り値が必要です。

<?php
function test(boolean $param) {}
test(true);
?>

上記の例は次を出力します:

致命的なエラー:キャッチされていないTypeError:test()に渡される引数1は、booleanのインスタンスでなければなりません。

つまり、booleanboolのエイリアスであり、タイプヒントではエイリアスは機能しません。
「実際の」名前を使用:bool


Type HintingType Casting の間に類似点はありません。

タイプヒンティングは、どのタイプを受け入れるべきかを関数に伝えているようなものです。

型キャストは、型を「切り替える」ことです。

許可されるキャストは次のとおりです。

(int), (integer) - cast to integer
(bool), (boolean) - cast to boolean
(float), (double), (real) - cast to float
(string) - cast to string
(array) - cast to array
(object) - cast to object
(unset) - cast to NULL (PHP 5)

Php型キャストでは、(bool)と(boolean)は同じです。

55