如何学习方法参数类型声明

严格模式要求参数类型完全匹配。

int 类型只接受整数。
1 .1 或者字符串会报错。

float 类型接受整数或浮点数,但 int 类型不接受 1 .1
字符串类型仅在严格模式下接受字符串,在非严格模式下可以隐式转换。

bool 类型只接受 true 或 false。
否则会报错。

可迭代类型接受数组、ArrayIterator 或 Generator。

我们建议您编写比较严格模式和非严格模式的测试代码。

类型声明请参考PHP7 .0+官方文档。

使用 foreach 来测试可迭代类型、数组和生成器之间的差异。

自己掂量一下。

php7和php8新特性

说实话,PHP 7 、8 的更新浪潮确实让我困惑了一段时间。
2 008 年进入这个行业的时候,我还在使用PHP5 当这些新玩意突然出现时,我感觉就像是从诺基亚直接转向 iPhone。
我必须习惯它。

我们先来说说PHP7 我当时在一家电子商务公司从事后端工作,该项目的代码像垃圾山一样堆积起来。
到处都有像 $temp_var 和 $result 这样毫无意义的变量名。
引入标量类型声明后,诚然有点极端,但实际上好多了:对 gettype() 函数的调用减少了一半,而且代码简单易读。
最有趣的是协程。
我们使用Swoole框架来连接高并发的API。
以前CPU开到最大是很正常的。
调整协程后,说实话,性能提升得吓人,启动速度快了3 秒。

然后是 PHP8 说实话,当时我刚刚接手一个政府项目,代码写得就像天书一样,各种神奇的方法满天飞。
命名参数一出现,我立马打自己一巴掌:之前调整接口,还得记住参数的顺序,而现在sendRequest(method:'GET', url:'api/path', params:{}),代码的可读性直接提高了。
不过当时我并不理解属性。
直到在一个老手的项目中看到它,我才明白为什么有人称之为“封装破坏”,倒是省事了。

我个人建议使用联合类型。
比如我们团队后来写了一个通用接口适配器,直接使用request_data: array|json。
它可以接受任何类型,而且代码也简单得多。
然而,我不得不说,按值调用有点棘手。
我的一位同事在函数中声明了一个 param: int ,但传递了一个 int|string 类型并崩溃了。
您仍然需要小心数据类型检查。

我记得的数据是,全面实施PHP8 后,我们很多项目的平均响应速度提高了2 5 %左右,但这个数字可能有点假,要看具体场景。
例如,协程对于 CPU 密集型任务有明显的效果,但在 I/O 等待较多的地方,异步队列实际上更适合。

快儿自己没有处理过,但是听说移植到Windows环境的成本比Linux高很多。
我建议你检查一下。
不管怎样,对我来说,PHP8 的新特性就像玩游戏一样,突然给你上帝视角。
即使你必须习惯它,但这真的很酷。