PHP扩展之面向过程的封装

将面向过程的C或C++接口封装给PHP使用,即这里指的面向过程的封装。

封装大致分为6步:

1.包含头文件,即引入所需要的宏、API定义等

2.声明导出函数

3.声明zend函数块

4.声明zend模块

5.实现get_module()函数

6.实现导出函数

可以看一个最简单的例子,源分别是文件test.h和test.cpp,他们生成extern_test.so。然后由test.php动态加载这个动态链接库。

***********************************************************************

//test.h

 

#ifndef _EXTERN_TEST_H_
#define _EXTERN_TEST_H_

#include <stdio.h>

 

//包含头文件,即引入所需要的宏、API定义等

#ifdef __cplusplus
extern "C" {
#endif
# include "php.h" 
# include "php_ini.h"
# include "ext/standard/info.h"
#ifdef __cplusplus
}
#endif

 

#define EXTERN_TEST_VERSTR         "0.1.0"

 

ZEND_MINFO_FUNCTION( extern_test );

ZEND_FUNCTION( extern_test_func );  //声明导出函数

#endif

***********************************************************************

//test.cpp

#include "test.h"

 

//声明zend函数块
zend_function_entry extern_test_functions[] =
{
    ZEND_FE( extern_test_func,    NULL )  

    { NULL, NULL, NULL }
};

 

//声明zend模块

zend_module_entry extern_test_module_entry =
{
    STANDARD_MODULE_HEADER,
    "extern_test",
    extern_test_functions,
    NULL,
    NULL,
    NULL,
    NULL,
    ZEND_MINFO(extern_test),
    EXTERN_TEST_VERSTR ,
    STANDARD_MODULE_PROPERTIES
};

 

//实现get_module()函数

#ifdef __cplusplus
BEGIN_EXTERN_C()
#endif
ZEND_GET_MODULE(extern_test)
#ifdef __cplusplus
END_EXTERN_C()
#endif

 

ZEND_MINFO_FUNCTION(extern_test)
{
}

 

//实现导出函数

ZEND_FUNCTION( extern_test_func )

{

    int iInt=0;

    if ( ZEND_NUM_ARGS() == 1 ){

        if ( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&iInt) == FAILURE){

            RETURN_LONG( ERR_PARAM_NUM );

        }

    }else{

        RETURN_LONG( ERR_PARAM_NUM );   

    }

    RETURN_LONG(iInt);

}
***********************************************************************

<?php

//test.php

dl( "extern_test.so" );

echo extern_test_func(12345);

?>

***********************************************************************

上述php程序执行后,会输出“12345”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值