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完全足夠使用。

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

    425

  • 沒用

    13

  • 開心

    135

  • 憤怒

    22

  • 可憐

    13

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評