PHP 8.2 新特性之 允许 null 和 false 作为独立类型

作者: 温新

分类: 【PHP基础】

阅读: 828

时间: 2023-02-20 14:16:57

hi,我是温新,一名 PHPer

PHP 8.0 增加了对联合类型的支持,这使得可以将一个类型声明为两个或多个类型的联合。它允许 false 和 null 作为联合类型的可能类型,但不允许它们作为独立的类型使用。

在PHP 8.2 中,将 允许 nullfalse 作为独立类型存在。

< PHP 8.2 版本

在 PHP 8.2 之前,只能使用 null 和 false 作为联合类型的一部分。

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">foo</span>(): <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">string</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span> {}</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">strpos</span>(): <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">int</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span> {}</span>

PHP 8.2 null false

1、基础使用

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 返回 null</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">foo_null</span>():<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span> {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 返回 fasle</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">foo_false</span>():<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span> {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 联合类型返回</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">foo_null_or_false</span>():<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span> {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">return</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span>

2、参数类型限制

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// true 限制参数类型</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">is_boo</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$value</span>):<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span> {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$value</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">is_boo</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span>); <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 正确</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">is_boo</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>); <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 报错 Fatal error: Uncaught TypeError: is_boo(): Argument #1 ($value) must be of type true, int given, called in</span></span>

如果使用 true 对参数进行了限制,那么传递的参数必须是 true,否则会报错。

请登录后再评论