<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國際加速解決方案。 廣告
                ## 前言 有的時候,我們的擴展要依賴其他擴展。比如,我們PHP的mysqli擴展就依賴mysqlnd擴展。這中情況下,我們怎么使用其他擴展呢?這個就是本文講述的內容。 我們新建立一個擴展,名字叫 `demo_dep `, 依賴之前的say擴展。 在`demo_dep`擴展中,我們實現`demo_say`方法。這個方法調用say擴展的say方法。 ## 代碼 ### 基礎代碼 確保say擴展的頭文件正確安裝到了php的include文件夾。使用以下命令查看: ``` $ ls /usr/local/php7/include/php/ext/say/ php_say.h ``` 如果輸出內容是`php_say.h`,那么就是已經正常安裝了。 如果沒有正常安裝,請進行如下操作進行安裝。修改say擴展的config.m4文件。增加以下代碼: ``` PHP_INSTALL_HEADERS(ext/say, [php_say.h]) ``` 然后,編譯安裝擴展。`make install`后,你會看到輸出中有: ``` Installing header files: /usr/local/php7/include/php/ ``` 上面的`/usr/local/php7/`是我本機的php安裝路徑。 另外,必須確認,我們要調用的方法,是否在頭文件中有聲明。 ### 代碼實現 #### 第一步:修改config.m4文件。增加依賴聲明。增加代碼如下: ``` PHP_ADD_EXTENSION_DEP(demo_dep, say) ``` #### 第二步:在demo_dep.c文件指定依賴say擴展。 在zend_module_entry demo_dep_module_entry之上增加代碼: ```c static const zend_module_dep demo_dep_deps[] = { ZEND_MOD_REQUIRED("mysqlnd") ZEND_MOD_END }; ``` 然后,把`demo_dep_module_entry`中的`STANDARD_MODULE_HEADER`修改為: ```c zend_module_entry demo_dep_module_entry = { // 以下兩行是新加的 STANDARD_MODULE_HEADER_EX, NULL, demo_dep_deps, "demo_dep", demo_dep_functions, PHP_MINIT(demo_dep), PHP_MSHUTDOWN(demo_dep), PHP_RINIT(demo_dep), /* Replace with NULL if there's nothing to do at request start */ PHP_RSHUTDOWN(demo_dep), /* Replace with NULL if there's nothing to do at request end */ PHP_MINFO(demo_dep), PHP_DEMO_DEP_VERSION, STANDARD_MODULE_PROPERTIES }; ``` #### 第三步:實現say方法 先增加頭文件。代碼如下: ``` #include "ext/say/php_say.h" ``` 然后調用say方法,實現demo_say方法。代碼如下: ``` PHP_FUNCTION(demo_say) { zif_say(INTERNAL_FUNCTION_PARAM_PASSTHRU); } ``` ## 代碼解讀 config.m4中的PHP_INSTALL_HEADERS是用于指定把頭文件安裝到php的頭文件目錄。 * 第一個參數:安裝目錄 * 第二個參數:要安裝的頭文件名。多個頭文件名用空格分割 config.m4中的`PHP_ADD_EXTENSION_DEP`是用于指定此擴展依賴的擴展。把此擴展靜態編譯進PHP時,會做檢測。檢測自己依賴的擴展是否被安裝。 在第二步增加的依賴,主要作用是在PHP啟動時,做擴展依賴檢測。如果,自己依賴的擴展不能正常被加載,則報錯。報錯信息如下: ``` PHP Warning: Cannot load module 'demo_dep' because required module 'say' is not loaded in Unknown on line 0 ``` 你可以把say擴展在ini文件的配置注釋掉,就可以看到報錯信息了。 第三步實現代碼中我們調用的是`zif_say`。這個`zif_say`就是 `PHP_FUNCTION(say) ` 展開后的方法名。 `INTERNAL_FUNCTION_PARAM_PASSTHRU`宏的使用,就是把傳遞給`PHP_FUNCTION(demo_say)`的參數,原樣傳遞給`PHP_FUNCTION(say)`
                  <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>

                              哎呀哎呀视频在线观看