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

        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號
        主站蜘蛛池模板: 国产乱码精品一区二区三区中文| 亚洲AV无码精品色午夜果冻不卡 | 2022国内精品免费福利视频 | 国产精品视频九九九| 无码国产精品一区二区免费3p| 精品精品国产高清a毛片| 99热国内精品| 亚洲精品无码不卡在线播放HE | 国产A√精品区二区三区四区| 国产精品多人p群无码| 亚洲精品无码久久久久去q| 久久亚洲av无码精品浪潮| 北条麻妃国产九九九精品视频| 国产精品久久久亚洲| 奇米影视7777久久精品| 亚洲av无码国产精品色在线看不卡 | 日韩精品无码永久免费网站| 国产精品一香蕉国产线看观看| 久久精品一区二区三区不卡| 99在线精品免费视频九九视| 久久精品国产亚洲AV高清热| 亚洲精品蜜桃久久久久久| 无码人妻精品一区二区蜜桃AV| 国产久爱免费精品视频| 国产精品人人做人人爽| 国产成人精品免费大全| 在线欧美v日韩v国产精品v| 九九精品成人免费国产片| 999精品在线| 国产精品九九九久久九九| 国产精品1024香蕉在线观看| 国产精品美女久久久m| 国产精品天天看天天狠| 精品无码国产一区二区三区51安| 无码人妻精品中文字幕| 嫖妓丰满肥熟妇在线精品| 少妇人妻偷人精品免费视频| 欧洲成人午夜精品无码区久久| 欧美精品VIDEOSSEX少妇| 久久综合国产乱子伦精品免费| 久久精品欧美日韩精品|