标签:
[root@bogon ext]# cd /usr/local/src/php-7.0.3/ext
[root@bogon ext]# ./ext_skel --extname=person //运行ext_skel创建扩展的开发包
[root@bogon ext]# vim person/config.m4
在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\n"); } /** * 声明析造函数 * @param * @return */ ZEND_METHOD(person,__destruct){ zend_printf("destruct\n"); } ZEND_METHOD(person,doing){ zend_printf("doing\n"); } ZEND_METHOD(person,saying){ zend_printf("saying\n"); } /*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
标签:
原文地址:http://www.cnblogs.com/yhl664123701/p/5310604.html