我一直在try 在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中的包装器类类似吗?

推荐答案

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

Warning

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

以上示例将输出:

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

因此,简而言之,booleanbool的别名,并且别名在类型提示中不起作用.
使用"真实"姓名:bool


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

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)

在phptype casting中,(Bool)和(Boolean)是相同的.

Php相关问答推荐

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

如何在数据库中添加注册表单中的动态新行?

PHP php_mongodb.dll for 32bit

自定义WooCommerce帐户下载列表

Msgraph-sdk-php v2如何从返回对象中获取数据?

在特定日期之间使用特定的元密钥销售产品

在内部API请求之后,在响应客户端之前,是否忘记了PHP中的Header()?

Laveel Livewire Get Groupby姓名列表

为什么本地主机(Xampp)上的laravel运行速度比普通html站点慢?

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

Laravel服务Provider 没有向服务类注入价值

如果日期是过go 日期,则隐藏事件发布类型

shell_exec运行大型数据处理

Laravel 在数据库上显示加密列

从 XAMPP 运行 shell 脚本时,意外标记(附近出现语法错误

Firefox 115 会话行为:为什么页面无法找到要加载的现有会话 ID?

根据页面的最后修订日期设置 MediaWiki 内部链接的样式

避免在 WooCommerce 中多次触发挂钩函数

适当的时区处理 Laravel / Carbon

hasOne/belongsToMany 或多对多