<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 組件 組件是 MixPHP 的核心設計思想,整個框架都是由眾多核心組件構成。 | 類 | | --- | | Mix\Core\Component\AbstractComponent | >[success] 用戶可通過自定義組件將頻繁調用的業務代碼常駐于內存,達到更高的性能。 組件的核心特征: - 常駐內存 - 事件 - 協程隔離 >[danger] 請謹慎注冊太多組件,組件應該是全局使用的,使用頻繁的。 ## 創建一個組件 你只需繼承 `Mix\Core\Component\AbstractComponent` 抽象類就可以了,由于組件類繼承自 `Mix\Core\Bean\AbstractObject` 所以組件都是通過依賴注入實例化的。 下面是一個組件范例: ~~~php <?php namespace Http\Components; use Mix\Core\Component\AbstractComponent; class MyComponent extends AbstractComponent { // 文字 public $text; public function hello() { echo 'hello, ', $this->text; } } ~~~ ## 組件注冊 所有組件都是在應用配置內的 `components` 字段內注冊, 下面是一個自定義組件的注冊配置: ~~~ // 組件配置 'components' => [ 'myComponent' => [ // 依賴引用 'ref' => beanname(Http\Components\MyComponent::class), ], ], // 依賴配置 'beans' => [ [ // 類路徑 'class' => Http\Components\MyComponent::class, // 屬性 'properties' => [ // 文字 'text' => 'world', ], ], ], ~~~ - `myComponent` 為組件名稱,調用時使用。 - `ref` 為引用的依賴名稱,beanname 方法將類名轉換為依賴名稱。 ## 如何調用組件 組件在框架內任何位置都可使用,包括:控制器、模型、自定義類、第三方類。 ~~~php app()->myComponent->hello(); ~~~ ## 為組件增加 IDE 代碼補全 找到 `applications/common/src/ApplicationInterface.php` ,在 PHP 注釋參數中增加: ``` @property \Http\Components\MyComponent $myComponent ``` >[info] MixPHP 框架幾乎全部代碼都有完善的 IDE 代碼補全支持,包括用戶自定義類,也提供了增加補全的方法。 ## 組件的事件 由于組件是常駐內存的,請求結束后不會銷毀,而有些特殊情況下需要對請求周期內做一些初始化、數據清理方面的處理,所以 MixPHP 設計了事件機制,提供下面兩個請求級別的事件函數: - onBeforeInitialize:服務器回調事件開始時觸發,用于請求開始的初始化處理。 - onAfterInitialize:服務器回調事件結束時觸發,用于請求結束的數據清理。 >[info] 已上事件代碼內沒有調用的組件不會觸發。 使用時只需在組件內重寫這幾個事件方法即可。 ~~~php // 前置初始化事件 public function onBeforeInitialize() { parent::onBeforeInitialize(); // ... } // 后置初始化事件 public function onAfterInitialize() { parent::onAfterInitialize(); // ... } ~~~ ## 組件的協程模式 框架實現了組件的協程隔離,用戶可在協程的任意位置使用組件,但用戶如果自己定義組件,需要了解組件的協程模式機制。 ### 協程模式 [>> 到 GitHub 查看協程模式如何配置 <<](https://github.com/mix-php/mix-pool/blob/v2/src/AbstractConnectionPool.php#L17) 組件的協程模式決定組件在新的協程中獲取實例的方式: - 新建模式 (默認):`ComponentInterface::COROUTINE_MODE_NEW` 當在啟動一個新的頂級協程時通過依賴配置新建一個組件類,執行 `onBeforeInitialize`,當該頂級協程內的最后一個子協程執行完成該組件類將被銷毀,執行 `onAfterInitialize`。 - 引用模式:`ComponentInterface::COROUTINE_MODE_REFERENCE` 在任意協程內都將獲取同一個全局實例,該類型的組件不執行 `onBeforeInitialize`、`onAfterInitialize` 事件。 ## 第三方類庫設置為組件 >[danger] 由于 Swoole 為常駐程序,所有使用全局變量的庫,都有可能存在變量污染問題而無法設置為組件,特別是在協程模式。 通過使用 `Mix\Core\Component\ComponentTrait` 手動處理第三方的類的依賴注入,代碼如下: ~~~php class MyComponent extends ThirdClass implements \Mix\Core\Component\ComponentInterface, ComponentInterface { use Mix\Core\Component\ComponentTrait; // 如果需要接收配置,可以在這里手動處理,$config 就是傳入的配置信息 public function __construct($config = []) { parent::__construct(); } } ~~~ 然后將這個類注冊到組件配置 `components` 下即可。
                  <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>

                              哎呀哎呀视频在线观看