1. ホーム
  2. php

PHP: bool と boolean の型ヒンティング

2023-12-04 05:41:19

質問

私は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におけるラッパークラスと同じようなものでしょうか?

どのように解決するのですか?

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

<ブロッククオート

警告

上記のスカラー型のエイリアスはサポートされていない。代わりに、クラス名やインターフェイス名として扱われます。例えば、boolean をパラメータや戻り値の型として使用する場合、bool 型ではなく boolean クラスまたはインターフェースのインスタンスが必要となります。

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

上記の例では、出力されます。

致命的なエラーです。Uncaught TypeError: test()に渡された引数1はbooleanのインスタンスでなければなりません、与えられたbooleanは

というわけで、簡単に言うと boolean のエイリアスです。 bool のエイリアスであり、タイプヒントではエイリアスは機能しません。

本当の名前を使ってください。 ブール


の間に類似性はありません。 Type Hinting Type 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) の両方が同じです。