PHP:布尔值与布尔类型提示

2022-08-30 08:20:15

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

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

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

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

上面的示例将输出:

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

简而言之,是 的别名,别名在类型提示中不起作用。
使用“真实”名称:布尔booleanbool


类型提示类型转换之间没有相似之处。

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

类型转换是在类型之间“切换”。

允许的强制转换是:

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


答案 2

推荐