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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 組件 組件是 MixPHP 的核心設計思想,整個框架都是由眾多核心組件構成。 | 類 | | --- | | mix\base\Component | >[success] 通過用戶可自定義組件、組件常駐內存這兩個特性 MixPHP 能讓用戶將頻繁調用的業務代碼也可常駐于內存,達到更高的性能。 組件的核心特征: - 常駐內存 - 事件 - 協程隔離 >[danger] 請謹慎注冊太多組件,組件應該是全局使用的,使用頻繁的。 ## 創建一個組件 你只需繼承 `\mix\base\Component` 類,就可以了,下面是一個范例: ~~~php <?php namespace apps\index\components; use \mix\base\Component; class MyComponent extends Component { public $name; public function hello() { echo 'hello, ', $this->name; } } ~~~ ## 組件注冊 所有組件都是在應用配置內的 `components` 字段內注冊,下面是一個自定義組件的注冊配置: ~~~php // 組件配置 'components' => [ // 普通命名 'myComponent' => [ // 類路徑 'class' => 'apps\index\components\MyComponent', // 屬性 'name' => '小花', ], // 帶前綴的名稱 'prefix.myComponent' => [ // 類路徑 'class' => 'apps\index\components\MyComponent', // 屬性 'name' => '小花', ], // 帶多級前綴的名稱 'prefix.prefix.myComponent' => [ // 類路徑 'class' => 'apps\index\components\MyComponent', // 屬性 'name' => '小花', ], ], ~~~ - myComponent 是組件名稱,調用時使用。 - class 需要實例化類的命名空間。 - 其他字段:都會在該類實例化后,導入為對象屬性,key為屬性名稱,value為屬性的值。 [>> 到 GitHub 查看默認組件配置 <<](https://github.com/mix-php/mix/blob/v1/apps/httpd/config/http_permanent.php#L18) ## 如何調用組件 在框架內任何位置都可使用,包括:控制器、模型、自定義類、第三方類。 ~~~php // 普通命名 app()->myComponent->hello(); // 帶前綴的名稱 app('prefix')->myComponent->hello(); // 帶多級前綴的名稱 app('prefix.prefix')->myComponent->hello(); ~~~ MixPHP 支持兩種運行模式,不同模式下組件初始化的方式不同: - mix-httpd:全部組件在服務器啟動時已經加載完成。 - Apache/PHP-FPM:懶加載,只有調用 `app()->[ComponentName]` 時組件才會加載。 ## 組件的事件 由于組件是常駐內存的,請求結束后不會銷毀,而有些特殊情況下需要對請求周期內做一些初始化、數據清理方面的處理,所以 MixPHP 設計了事件機制,提供下面兩個請求級別的事件函數: - onRequestBefore:每次請求開始時觸發,用于請求級別的初始化處理(代碼內沒有調用的組件不會觸發)。 - onRequestAfter:每次請求結束時觸發,用于請求結束后組件數據清理(代碼內沒有調用的組件不會觸發)。 使用時只需在組件內重寫這幾個事件方法即可。 ~~~php // 請求前置事件 public function onRequestBefore() { parent::onRequestBefore(); // ... } // 請求后置事件 public function onRequestAfter() { parent::onRequestAfter(); // ... } ~~~ 由于 `\mix\base\Component` 類繼承了 `mix\base\BaseObject` 類,所以還包含三個事件: - onConstruct:構造事件,相當于 __construct 方法。 - onInitialize:當組件完成構造事件并導入配置信息為屬性后觸發該事件,用于做一些初始化處理。 - onDestruct:析構事件,相當于 __destruct 方法。 使用時只需在組件內重寫這幾個事件方法即可。 ~~~php // 構造事件 public function onConstruct() { parent::onConstruct(); // ... } // 初始化事件 public function onInitialize() { parent::onInitialize(); // ... } // 析構事件 public function onDestruct() { parent::onDestruct(); // ... } ~~~ ## 直接將第三方類庫設置為組件 `Trait` >[danger] 由于 Swoole 為常駐程序,所有使用全局變量的庫,都有可能存在變量污染問題而無法設置為組件,特別是在協程模式。 用戶只需新增一個類,繼承第三方類庫,實現 `mix\base\ComponentInterface`,`mix\base\StaticInstanceInterface` 接口,并引用 `mix\base\StaticInstanceTrait`、`mix\base\ComponentTrait` 即可。 代碼如下: ~~~php class MyComponent extends ThirdClass implements StaticInstanceInterface, ComponentInterface { use StaticInstanceTrait, 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>

                              哎呀哎呀视频在线观看