• php扩展开发2--添加类


    1.需要实现的细节

    • 实现一个person类
    • 实现一个doing方法和saying方法

    2.第一个扩展

    2.1创建类的扩展:

    [root@bogon ext]# cd /usr/local/src/php-7.0.3/ext

    [root@bogon ext]# ./ext_skel --extname=person   //运行ext_skel创建扩展的开发包

    2.2 修改配置

    [root@bogon ext]# vim person/config.m4

    • dnl PHPARGWITH(person, for person support,
    • dnl Make sure that the comment is aligned:
    • dnl [ --with-person Include person support])
    • 更改为:
    • PHPARGWITH(person, for person support,
    • dnl Make sure that the comment is aligned:
    • [ --with-person Include person support])
    • ****dnl  在这是注释的意思。去掉dnl 就是打开 这一行的意思

    2.3 实现代码

    在php_person.h头中加上

    extern zend_class_entry *person_ce;
    
    PHP_METHOD(person_ce,__construct);
    PHP_METHOD(person_ce,saying);
    PHP_METHOD(person_ce,doing);

     在person.c头中加上

    /*定义类*/
    zend_class_entry *person_ce;
    /**
     * 声明构造函数
     * @param
     * @return
     */
    ZEND_METHOD(person,__construct){
        zend_printf("construct
    ");
    }
    
    /**
     * 声明析造函数
     * @param
     * @return
     */
    ZEND_METHOD(person,__destruct){
    
        zend_printf("destruct
    ");
    }
    
    
    ZEND_METHOD(person,doing){
    
        zend_printf("doing
    ");
    
    }
    
    ZEND_METHOD(person,saying){
    
        zend_printf("saying
    ");
    
    }
    
    /*NULL  表示不传参数
    *
    *  ZEND_ACC_PUBLIC  说明是public  方法
    * ZEND_ACC_CTOR  说明是构造函数
    * ZEND_ACC_DTOR 说明是析构函数
    */ const zend_function_entry person_functions[] = { ZEND_ME(person, __construct,NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) ZEND_ME(person,doing,NULL,ZEND_ACC_PUBLIC) ZEND_ME(person,saying,NULL,ZEND_ACC_PUBLIC) ZEND_ME(person,__destruct,NULL,ZEND_ACC_PUBLIC|ZEND_ACC_DTOR) PHP_FE_END /* Must be the last line in person_functions[] */ }; //将类和方法注册到zend PHP_MINIT_FUNCTION(person) { zend_class_entry ce; INIT_CLASS_ENTRY(ce, "person", person_functions); person_ce = zend_register_internal_class(&ce TSRMLS_CC); zend_declare_property_null(person_ce,"saying",strlen("saying"),ZEND_ACC_PUBLIC); zend_declare_property_null(person_ce,"doing",strlen("doing"),ZEND_ACC_PUBLIC); return SUCCESS; }

    执行  命令  phpize   

    ./configure

    make 

    make install  或者 手动cp

    改更php.ini 加上[person] extenstion=person.so

    使用扩展:

    [root@bogon tests]# cat test.php
    <?php
    
    $n = new person();
    echo $n->saying();
    echo $n->doing();
    
    [root@localhost tests]# php test.php
    construct
    saying
    doing
    destruct

    该文章参考与:

    原链接:http://www.djhull.com/phpext/php-ext-2.html

    • 请尊重本人劳动成功,可以随意转载但保留以下信息
    • 作者:岁月经年
    • 时间:2016年03月
  • 相关阅读:
    项目在入口加一个简单的密码验证
    关于APICloud使用心得(原创)
    vue、React Nactive的区别(转载)
    js的Element.scrollIntoView的学习
    立个flag---每天一篇博客
    ACID理解
    CAP原理与最终一致性 强一致性 弱一致性
    事物隔离级别
    分布式事务
    MySQL日志
  • 原文地址:https://www.cnblogs.com/yhl664123701/p/5310604.html
Copyright © 2020-2023  润新知