<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## Bean MixPHP 參考了 Java Spring 的依賴注入(DI)與控制反轉(IoC),具體實現就是通過 Bean 的方式,MixPHP 的實現是非常簡單高效的。 | 類 | | --- | | Mix\Core\Bean\AbstractObject | 整體實現分為幾個部分: - 配置文件:`beans` 配置項負責描述依賴注入的結構關系。 - AbstractObject:抽象類 `AbstractObject ` 負責屬性導入與對象實例化。 ## `beans` 配置項 應用配置文件中,有一個 `beans` 配置項,這里描述了框架使用的所有類的依賴關系。 `beans` 配置項是一個數組,其中每一個節點為一個 `bean` ,每個 `bean` 包含三個屬性: - class:類的路徑,通常使用 ::class 的方式獲取 - name:默認等于 class 的值,通常只有在一個類需多次注入不同屬性時使用,需給相同的類定義不同的名稱。 - properties:需注入的屬性,內部的 key 將注入成類的屬性名稱,value 將賦值為屬性的值。 - ref:引用的另一個 `bean` 的 `name`,由于沒有配置 `name` 的 `bean` 默認會通過 `class` 生成一個名稱,所以框架提供了 `beanname` 方法方便用戶獲取默認名稱。 下面是一個授權組件的依賴關系配置: ~~~ // 依賴配置 'beans' => [ // Auth [ // 類路徑 'class' => Mix\Auth\Authorization::class, /** 名稱:通常不需要配置這個屬性,因為默認框架會生成一個 name, 值等于 beanname(class),只有在同一個類需要不同配置時才需自行配置名字, 這時就不需要使用 beanname 方法命名了,直接指定一個字符串的名稱即可, 在其他類中 ref 引用時,也不需要使用 beanname 方法。 // 默認生成的名稱 'name' => beanname(Mix\Auth\Authorization::class), // 自定義名稱 'name' => 'newName', */ // 屬性 'properties' => [ // BearerToken 'bearerToken' => [ // 依賴引用 'ref' => beanname(Mix\Auth\BearerToken::class), ], // jwt 'jwt' => [ // 依賴引用 'ref' => beanname(Mix\Auth\JWT::class), ], ], ], // BearerToken [ // 類路徑 'class' => Mix\Auth\BearerToken::class, ], // jwt [ // 類路徑 'class' => Mix\Auth\JWT::class, // 屬性 'properties' => [ // 鑰匙 'key' => 'example_key', // 簽名算法 'algorithm' => Mix\Auth\JWT::ALGORITHM_HS256, ], ], ], ~~~ ## 通過依賴注入實例化 上文的授權組件的依賴關系配置中,由于 Authorization 繼承了 AbstractObject ,因此可以非常方便的實例化: ``` // 使用默認 beanname 實例化 $auth = Mix\Auth\Authorization::newInstance(); // 指定 beanname 實例化 $auth = Mix\Auth\Authorization::newInstance('beanname'); ``` ## AbstractObject 上面的依賴關系定義完成后,最終需要根據依賴注入到對象中,而完成注入工作的就是 AbstractObject 這個抽象類。 因此需要使用完整的依賴注入、控制反轉,必須要繼承該類,框架大部分類都繼承自 AbstractObject 這個抽象類。 ### 第三方的類的依賴注入 通過使用 `Mix\Core\Bean\ObjectTrait` 手動處理第三方的類的依賴注入,代碼如下: ~~~php class MyLibrary extends ThirdLibrary implements \Mix\Core\Bean\ObjectInterface { use Mix\Core\Bean\ObjectTrait; // 如果需要接收配置,可以在這里手動處理,$properties 就是傳入的屬性信息 public function __construct($properties = []) { parent::__construct(); } } ~~~ ### AbstractObject 的事件 包含了三個事件: - onConstruct:構造事件,相當于 __construct 方法。 - onInitialize:當完成構造事件并導入配置信息為屬性后觸發該事件,用于做一些初始化處理。 - onDestruct:析構事件,相當于 __destruct 方法。 使用時只需重寫這幾個事件方法即可。 ~~~php // 構造事件 public function onConstruct() { parent::onConstruct(); // ... } // 初始化事件 public function onInitialize() { parent::onInitialize(); // ... } // 析構事件 public function onDestruct() { parent::onDestruct(); // ... } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看