我一直在尝试在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中的包装类吗?
答案 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的实例,给定布尔值
简而言之,boolean
是bool
的别名,别名不适用于类型提示。
使用&#34;真实&#34;名称:布尔
Type Hinting
和Type 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)都是相同的。