新手,剛接觸webman
注意到使用php-di或者默認(rèn)容器時,控制器等依賴注入的對象好像不是單例的。
所以我自己移植了 tp的容器,將所有對象變成了單例的。比如控制器實(shí)例
這樣的改變會有潛在問題嗎?
這種容器能完美支持webman嗎?
public function demo(Request $request, Test $test, Test $test1)
{
// 使用 php-di/默認(rèn) 容器 輸出 false
// 使用 thinkphp 容器 輸出 true
dump($test === $test1);
dump($this->t++);
return $test->index();
}
開啟控制器復(fù)用,控制器里注入的對象就相當(dāng)于單例了。
只要容器符合psr11規(guī)范就可以在webman中用。
webman里單例和php-fpm有些不同,php-fpm是單個請求內(nèi)共享的單例,請求結(jié)束后釋放所有實(shí)例,A請求給單例設(shè)置的屬性,B請求讀不到。
webman單例是所有請求共享的單例,webman里A請求更改了單例的屬性,B請求可以讀取這個更改后的屬性值。了解這點(diǎn)編碼就不會有問題。