報錯的完整信息如下:
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完全足夠使用。