PHP:bool vs boolean type hinting

时间:2017-05-16 18:30:06

标签: php boolean default-value type-hinting

我一直在尝试在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);

给出完全相同的输出

  

:布尔值假

这是为什么?这类似于Java中的包装类吗?

1 个答案:

答案 0 :(得分:50)

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

  

警告
  不支持上述标量类型的别名。相反,它们被视为类或接口名称。例如,使用boolean作为参数或返回类型将需要一个参数或返回值,该值是类或接口boolean的实例,而不是bool类型:

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

以上示例将输出:

     
    

致命错误:未捕获TypeError:传递给test()的参数1必须是boolean的实例,给定布尔值

  

简而言之,booleanbool的别名,别名不适用于类型提示。
使用&#34;真实&#34;名称:布尔

Type HintingType Casting之间没有相似之处。

类型提示类似于你告诉你的函数应该接受哪种类型。

类型转换是&#34;切换&#34;类型之间。

  

允许演员阵容:

(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)都是相同的。