<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PHP-FFIPHP 外部函數(shù)接口

          聯(lián)合創(chuàng)作 · 2023-09-28 11:44

          FFI PHP 擴展提供了一種調(diào)用本地函數(shù),訪問本地變量和創(chuàng)建/訪問用 C 語言定義的數(shù)據(jù)結(jié)構(gòu)的簡單方法。 擴展的 API 非常簡單,并通過以下示例及其輸出來演示:

          <?php
          $libc = new FFI("
              int printf(const char *format, ...);
              char * getenv(const char *);
              unsigned int time(unsigned int *);
          
              typedef unsigned int time_t;
              typedef unsigned int suseconds_t;
          
              struct timeval {
                  time_t      tv_sec;
                  suseconds_t tv_usec;
              };
          
              struct timezone {
                  int tz_minuteswest;
                  int tz_dsttime;
              };
          
          	int gettimeofday(struct timeval *tv, struct timezone *tz);    
          ", "libc.so.6");
          
          $libc->printf("Hello World from %s!\n", "PHP");
          var_dump($libc->getenv("PATH"));
          var_dump($libc->time(null));
          
          $tv = $libc->new("struct timeval");
          $tz = $libc->new("struct timezone");
          $libc->gettimeofday($tv, $tz);
          var_dump($tv->tv_sec, $tv->tv_usec, $tz);
          ?>
          Hello World from PHP!
          string(135) "/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/dmitry/.local/bin:/home/dmitry/bin"
          int(1523617815)
          int(1523617815)
          int(977765)
          object(CData)#3 (2) {
            ["tz_minuteswest"]=>
            int(-180)
            ["tz_dsttime"]=>
            int(0)
          }

          FFI::__constructor() 有兩個參數(shù)(都是可選的)。 第一個是 C 聲明的集合,第二個是 DSO 庫。 由第一個參數(shù)定義的所有變量和函數(shù)都綁定到 DSO 庫中相應(yīng)的本地符號,然后可以作為FFI對象方法和屬性訪問。 C 類型的參數(shù),返回值和變量會自動轉(zhuǎn)換為 PHP 類型(如果可能)。 否則,它們被封裝在一個特殊的 CData 代理對象中,并可能被元素訪問。

          在某些情況下(例如,通過指針傳遞 C 結(jié)構(gòu)),我們可能需要創(chuàng)建一個真正的 C 數(shù)據(jù)結(jié)構(gòu)。 這可以使用 FFF::new() 方法。 它需要一個 C 類型定義,并且可以重用由 FFI::__constructor() 定義的 C 類型和標(biāo)簽。

          也可以使用 FFI::new() 作為靜態(tài)方法來創(chuàng)建任意 C 數(shù)據(jù)結(jié)構(gòu)。

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩黄色免费爱爱 | 国产乱子伦精品视频潮 | 台湾成人精品在线 | 无码高清视频在线免费观看 | 黄色国产在线观看 |