PHP扩展开发入门3

Wesley13
• 阅读 347

原来笔记,就和撸代码一样,都很随性。后来看的代码和博客多了。发现太随性了,很难撸出高质量的代码,很难写出能看懂的笔记。

记笔记是一个梳理知识的过程,可以表达出自己对该知识的熟悉程度。

今天撸一段代码,记录一下PHP扩展中如何接收参数。

废话就不多说了,至于基础性的,比如如何创建扩展也不在这里说了,如何写接收参数的函数,只需要修改函数功能部分。昨天写的功能部分如下:

 /*
  
 这里是功能
 这个函数不接收参数,只有返回值。
 */
 PHP_FUNCTION(helloworld)
{
     
        int  len;
    char *strg;
 
     
    len = spprintf(&strg, 0, "%.78s", "helloworld");
    RETURN_STRINGL(strg, len, 0);
}

    这里实现接收参数计算a+b的值。首先接收参数的话需要在方法内添加如下代码

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {
        return;
    }

    这里接收参数需要了解如下内容,这里接收一个整数型就需要写入一个'l',接收两个就写两个'll',以此类推,,然后在写入接收参数后赋值给指定的变量地址,一个参数就写一个变量,两个就写两个,三个就写三个一次类推。至于字符串和其他的参数,回来同一说明。

b   Boolean
l   Integer 整型
d   Floating point 浮点型
s   String 字符串
r   Resource 资源
a   Array 数组
o   Object instance 对象
O   Object instance of a specified type 特定类型的对象
z   Non-specific zval 任意类型~
Z   zval**类型
f   表示函数、方法名称,PHP5.1里貌似木有... .

修改后的代码如下

 /*
  
 这里是功能
 这个函数不接收参数,只有返回值。
 */
 PHP_FUNCTION(helloworld)
{
    int a;
    int b;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {
        return;
    }
 
     
    int c;
    c=a+b;
    RETURN_LONG(c);
}

    就这样,一个加法计算的函数就算完成了。接下来编译启动。然后在PHP代码中这样调用:

<?php
    echo helloworld(1,3);
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
php查询mysql并缓存到redis
首先安装redis,并在php环境中开启php\_redis扩展。下面不多说了,直接上代码<?php$redisnewredis();$redisconnect('127.0.0.1',6379);$blog$redisget('redisrow');//如果$blog数组为空
Wesley13 Wesley13
2年前
PHP扩展开发(二)
上文我们学会了如何快速的进行一个PHP扩展的helloworld!下面我们将学习如何传递参数必要知识点1.变量存储结构(php5.6src/ZEND/zend.h)typedefunion_zvalue_value{longlval;//longvalue
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
2年前
Ecshop用户中心的收藏列表里显示商品缩略图
1)、修改includes/lib\_clips.php文件将下面代码$sql'SELECTg.goods_id,g.goods_name,g.market_price,g.shop_priceASorg_price,'.修改为$sql'SELECTg.goods_id,g.goods_nam
Stella981 Stella981
2年前
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
!(https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png)PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所.<?php$apparray('db_prefix''
Wesley13 Wesley13
2年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间?我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。例如,返回:2009120100:00:001楼使用此功能:functiongetDatetimeNow(){
Stella981 Stella981
2年前
Linux下用C++开发PHP扩展
GOOGLE了很久,才发现一篇合适的...◑﹏◐是C写的PHP扩展!!!还是要记住:源代码版本一定要和你的开发环境一样!!!步骤如下:1.修改配置文件config.m4先去掉PHP\_ARG\_ENABLE的三行注释,再在最后面if结束前(FI)加上下面的代码PHP_REQUIRE_CXX()PHP_ADD_LIB