如何解決依賴注入中的類型提示問題?使用mrclay/props-dic可以!

可以通過一下地址學(xué)習(xí)composer學(xué)習(xí)地址

在開發(fā)過程中,依賴注入(dependency injection, di)是非常常見的一種設(shè)計模式。它可以幫助我們管理對象之間的依賴關(guān)系,提高代碼的可維護性和可測試性。然而,在使用傳統(tǒng)的di容器時,我常常遇到一個問題:ide無法識別從容器中獲取的對象類型,這導(dǎo)致無法提供智能提示和靜態(tài)分析,嚴重影響了我的開發(fā)效率。

為了解決這個問題,我嘗試了mrclay/props-dic這個庫。mrclay/props-dic提供了一種全新的方式來訪問容器中的值:通過自定義的屬性和方法名。這不僅讓IDE能夠識別返回值的類型,還能提供更好的智能提示和靜態(tài)分析功能。

使用composer安裝mrclay/props-dic非常簡單,只需運行以下命令:

composer require mrclay/props-dic

讓我們來看一個簡單的例子,展示如何使用mrclay/props-dic:

/**  * @property-read Foo $foo  * @method        Foo new_foo()  */ class MyContainer extends PropsContainer {     public function __construct() {         $this->foo = function (MyContainer $c) {             return new Foo();         };     } }  $c = new MyContainer();  $foo1 = $c->foo; // 你的IDE會知道這是一個Foo實例  $foo2 = $c->new_foo(); // 一個新的Foo實例  $foo3 = $c->foo; // 與$foo1相同

在這個例子中,我們通過自定義的屬性$foo和方法new_foo()來訪問容器中的值。IDE能夠識別這些屬性和方法的類型,并提供相應(yīng)的智能提示和靜態(tài)分析。

另一個更復(fù)雜的例子展示了如何管理多個依賴:

/**  * @property-read string $style  * @property-read Dough  $dough  * @property-read Cheese $cheese  * @property-read Pizza  $pizza  * @method        Slice  new_slice()  */ class PizzaServices extends PropsContainer {     public function __construct() {         $this->style = 'deluxe';          $this->dough = function (PizzaServices $c) {             return new Dough();         };          $this->setFactory('cheese', 'CheeseFactory::getCheese');          $this->pizza = function (PizzaServices $c) {             $pizza = new Pizza($c->style, $c->cheese);             $pizza->setDough($c->dough);             return $pizza;         };          $this->slice = function (PizzaServices $c) {             return $c->pizza->getSlice();         };     } }  $c = new PizzaServices;  $c->pizza; // 第一次解析并緩存cheese和dough。  $c->pizza; // 與上面的pizza實例相同(沒有調(diào)用工廠)。  $c->new_slice(); // 一個新的Slice實例 $c->new_slice(); // 另一個新的Slice實例

在這個例子中,我們通過自定義的屬性和方法來管理多個依賴關(guān)系,IDE能夠提供更好的類型提示和靜態(tài)分析功能。

使用mrclay/props-dic庫,我不僅解決了IDE無法識別返回值類型的問題,還提升了開發(fā)效率和代碼質(zhì)量。它通過自定義屬性和方法名訪問值的方式,使得依賴注入變得更加直觀和易于管理。如果你在使用依賴注入時也遇到類似的問題,不妨嘗試一下mrclay/props-dic。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享