站長資訊網
        最全最豐富的資訊網站

        php8的擴展arginfo生成工具之使用初體驗

        php8提供了非常方便的擴展函數或類參數信息的生成工具。

        只需要維護一份xyz.stub.php,就可以使用工具生成 xyz_arginfo.h

        毫無疑問,這種方式,又降低了廣大 phper 開發擴展的門檻,更易維護。

        上手體驗:

        生成擴展骨架。

        cd ext php ext_skel.php --ext test

        隨便添加一個函數,更改 test.stub.php

        <?php  /** @generate-function-entries */  function test1(): void {}  function test2(string $str = ""): string {}  function test3(int $integer = 123): int {}

        重新生成 test_arginfo.h

        php ../../build/gen_stub.php test.stub.php

        相關 commit 可以 點擊這兒(https://github.com/php/php-src/compare/master…nikic:php-stubs)

        寫個簡單的擴展舉例,通過php擴展的方式來實現python中的allany函數。

        準備工作。
        • 下載php最新源碼
        • 已經安裝好php
        生成擴展骨架。

        cd ext php ext_skel.php --ext python
        撰寫函數原型,編輯 python.stub.php
        <?php  /** @generate-function-entries */  function all(array $arr): bool {}  function any(array $arr): bool {}
        根據 python.stub.php 生成 python_arginfo.h

        php ../../build/gen_stub.php python.stub.php
        實現函數邏輯,編輯 python.c
        PHP_FUNCTION(all) {     zval *input;     zval *item;     int result = 1, item_result = 1;     HashTable *htbl;      ZEND_PARSE_PARAMETERS_START(1, 1)         Z_PARAM_ARRAY(input)     ZEND_PARSE_PARAMETERS_END();      htbl = Z_ARRVAL_P(input);      ZEND_HASH_FOREACH_VAL(htbl, item) {         item_result = zend_is_true(item);         result &= item_result;     } ZEND_HASH_FOREACH_END();      RETURN_BOOL(result); }  /* {{{ void any() */ PHP_FUNCTION(any) {     zval *input;     zval *item;     int result = 0, item_result = 0;     HashTable *htbl;      ZEND_PARSE_PARAMETERS_START(1, 1)         Z_PARAM_ARRAY(input)     ZEND_PARSE_PARAMETERS_END();      htbl = Z_ARRVAL_P(input);      ZEND_HASH_FOREACH_VAL(htbl, item) {         item_result = zend_is_true(item);         result |= item_result;     } ZEND_HASH_FOREACH_END();      RETURN_BOOL(result); }
        編寫單元測試,編輯 002.phpt003.phpt, 新建 004.phpt005.phpt
        --TEST-- Check all function true case --SKIPIF-- <?php if (!extension_loaded('python')) {     echo 'skip'; } ?> --FILE-- <?php var_dump(all([])); var_dump(all([1])); var_dump(all([-1, 1, '1'])); ?> --EXPECT-- bool(true) bool(true) bool(true)
        --TEST-- Check all function false case --SKIPIF-- <?php if (!extension_loaded('python')) {     echo 'skip'; } ?> --FILE-- <?php var_dump(all(['0'])); var_dump(all([0])); var_dump(all([''])); var_dump(all([false])); var_dump(all([1, -1, 100, false])); var_dump(all([0, -1, 100, 1])); var_dump(all(['1', -1, '', 100, 1])); ?> --EXPECT-- bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

        --TEST-- Check any function true case --SKIPIF-- <?php if (!extension_loaded('python')) {     echo 'skip'; } ?> --FILE-- <?php var_dump(any(['a', 'b', 'c', 'd'])); var_dump(any([['a', 'b', '', 'd']])); var_dump(any([['', 'b', 'c', 'd']])); var_dump(any([['a', 'b', 'c', '']])); ?> --EXPECT-- bool(true) bool(true) bool(true) bool(true)

        --TEST-- Check all function false case --SKIPIF-- <?php if (!extension_loaded('python')) {     echo 'skip'; } ?> --FILE-- <?php var_dump(any(['0'])); var_dump(any([0])); var_dump(any([''])); var_dump(any([false])); var_dump(any([0, '0', '', false])); ?> --EXPECT-- bool(false) bool(false) bool(false) bool(false) bool(false)
        編譯、測試和安裝

        ./configure && make make test sudo make install
        加入到php.ini

        php -i | grep ini # 定位你的php.ini文件

        加入

        extension=python.so

        查看是否成功

        php -m | grep python
        實測

        php -r "var_dump(all([]));“ php -r "var_dump(any([]));"

        PHP8新增了蠻多有用的宏和特性。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 97人妻无码一区二区精品免费| 2020国产精品| 精品无码一区二区三区爱欲| 国产精品无码无卡无需播放器 | 538国产精品一区二区在线| 久久青青草原精品国产软件| 欧美极品欧美精品欧美视频| 国产成人精品无码播放| 亚洲精品无码午夜福利中文字幕| 国产精品天干天干在线综合| 成人精品在线视频| 精品调教CHINESEGAY| 无码国产精品一区二区免费16| 欧美日韩国产精品 | 久久亚洲精品视频| 99久久国语露脸精品国产| 无码精品久久久天天影视| 四虎国产精品永久地址入口| 久久99精品久久久久久不卡| 无翼乌无遮挡全彩老师挤奶爱爱帝国综合社区精品 | 69久久精品无码一区二区| 热re99久久6国产精品免费| 亚洲欧美精品一区久久中文字幕| 久久久久久无码国产精品中文字幕| 国产精品第一页在线| 国产精品 码ls字幕影视| 中文精品一卡2卡3卡4卡| 四虎影视884a精品国产四虎 | 国产精品无码av在线播放| 蜜臀久久99精品久久久久久小说| 亚洲精品成人网站在线观看| 亚洲精品国产精品乱码不99| 亚洲AV无码国产精品色午友在线| 亚洲国产成人精品无码区在线观看| 亚洲日韩国产AV无码无码精品| 无码精品蜜桃一区二区三区WW| 看99视频日韩精品| 亚洲精品永久在线观看| 亚洲精品午夜无码电影网| 中文字幕精品一区二区精品| 日韩精品无码中文字幕一区二区 |