PHP

During inheritance of ArrayAccess: Uncaught ErrorException: Return type of xxx should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

字号+ 编辑: 国内TP粉 修订: 种花家 来源: 2023-10-08 我要说两句(0)

最近时间笔者修改公司一个老掉牙项目, 发现是thinkphp5写的, 公司服务器内环境是8.2, 把修改经验笔记写到这里。

报错的完整信息如下:

During inheritance of ArrayAccess: Uncaught ErrorException: Return type of think\xxx::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in xxx

可能会有多个文件需要改, 比如分页、还有所谓的Container.php

找到关键字offsetExists($offset)将之改成

offsetExists($offset): bool

找到关键字offsetSet($offset, $value)

改为

offsetSet($offset, $value): void

查找关键字offsetGet($offset) 改为

offsetGet($offset): mixed

找关键字offsetUnset($offset)改为

offsetUnset($offset): void

找到关键字getIterator() 在其后面加上ArrayIterator

public function getIterator(): ArrayIterator

找到count()方法改成

count():int

还有一处jsonSerialize() 后面追加array类型约束

public function jsonSerialize(): array

现在php业界乱象频出, 新入行php的同学, 建议不要使用workerman, webman, brophp, hookphp和类似的个人跑分框架参与线上项目。正经公司没人用。相关经验也不值钱。除非你公司的项目没什么流量, 公司也没人管你怎么选型。php新手一般刚入行免不了被割韭菜, 国内php行业割韭菜的人也不少, 往你脑袋里灌屎,还赚走你的学费钱。建议宁可去学一些免费的laravel, yii2, golang课程,对大家来说简单易学应用面广, 对未来找工作也有好处。如果实在后端必须用到php+高性能,做个负载均衡即可。fpm通过请求隔离, 确保了项目安全, 其实是php的一大亮点,为什么要丢弃它呢?

性能优化方面, 少一些找不到变量的报错, 线上开着opcache+jit即可。有许多人对开启opcache特性有误解, 或者跑到网上抱怨jit没效果的小伙伴, 记得在配置文件里额外追加以下配置再压测:

extension="opcache.so"

如果服务器资源实在吃紧, 用4.4.0以上版本的swoole/roadrunner也可以。不要听网上说php搞持久化内存意味着高并发的传言,就用一些奇怪的框架。除了swoole/roadrunner之外,个人维护的东西真就扛不住。线上项目大多数场景最重要的就是稳定而不是性能,性能的瓶颈也不在逻辑层面而是在数据库。你用请求隔离带来的宝贵稳定性,未必能换来性能提升,除非你的业务逻辑不包含数据库。追求高并发就上hyperf rust go, 平时fpm+opcache+jit完全足够使用。

阅完此文,您的感想如何?
  • 有用

    424

  • 没用

    11

  • 开心

    135

  • 愤怒

    22

  • 可怜

    13

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • mac开发接入微信公众号接口返回报错 cURL error 56: SSLRead() return error -9806

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • PHP的换行符是什么

  • 由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上宾友点评