php扩展开发2--添加类

1.需要实现的细节

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

2.第一个扩展

2.1创建类的扩展:

[[email protected] ext]# cd /usr/local/src/php-7.0.3/ext

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

2.2 修改配置

[[email protected] 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\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

使用扩展:

[[email protected] tests]# cat test.php
<?php

$n = new person();
echo $n->saying();
echo $n->doing();

[[email protected] tests]# php test.php
construct
saying
doing
destruct

该文章参考与:

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

  • 请尊重本人劳动成功,可以随意转载但保留以下信息
  • 作者:岁月经年
  • 时间:2016年03月
时间: 2024-11-14 23:51:09

php扩展开发2--添加类的相关文章

用扩展开发一个PHP类

原文:http://my.oschina.net/mickelfeng/blog/122519?p=1 假设我们要用PHP扩展实 现一个类Person,它有一个private的成员变量$_name和两个public的实例方法getName()和setName(),可以用 PHP代码表示如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php class Person {     private $_name;     public function getName()    

PHP扩展开发之简单类开发

接下来我们要用扩展的形式实现以下类(演示环境:linux.php-5.5.34-src) 1 <?php 2 class Person 3 { 4 private $_name; 5 public function getName() 6 { 7 return $this -> _name; 8 } 9 public function setName($name) 10 { 11 $this -> _name = $name; 12 } 13 } 在PHP源码目录下 1 cd php-5

openstack 扩展开发最佳实践之计算节点高可用

前言:注意是扩展开发,这个词是我杜撰的,大概意思是指基于openstack的rest api做的一些开发,用于辅助相关功能,而不是直接改动openstack内的代码,怎么修改添加openstack各个组件的代码不在此文章内容内. 首先,千万,千万,千万不要用Openstack提供的SDK,原因如下. 一,SDK的相关文档并不健全. 二,版本不够统一,即兼容的问题. 所以不要使用openstack的SDK而是自己查阅openstack的API文档,通过requests库发http请求要比SDK灵活

JavaScript之jQuery-9 jQuery 开发插件(添加新全局函数、添加jQuery对象方法、添加新简写方法、方法参数)

一.添加新的全局函数 全局函数 - 全局函数,实际上就是jQuery对象的方法,从实践角度看,它们是位于jQuery命名空间内部的函数 - jQuery内置的某些功能是通过全局函数实现的 - $.ajax()函数就是典型的全局函数 - 向jQuery命名空间添加一个函数,只需要将这个新函数指定为jQuery的一个属性值   - 如果要使用该全局函数时,可通过一下代码调用 - 也可以通过别名来调用 添加多个函数 - 如果我们想在插件中提供多个全局函数,可以独立的声明这些函数   - 还可以使用$.

资金平台交易明细扩展开发-DEP

前言 支持农垦项目中,需要增加抓取银行接口传输数据,需求有两点:一是银企平台前置机需要增加扩展中行.农行数据字段.(代理账号.代理账户名称.代理银行) 二是EAS资金模块中的交易明细查询列表界面能够显示扩展的上述三个字段数据. 资金模块 交易明细表:T_BE_TransDetail 实体:TransDetail 新增字段 <String 80>:代理账号: agentAccNo 代理账户名称:agentAccName 代理银行名称:agentAccBkName 银企平台与资金平台二者数据关系:

iOS开发系列--App扩展开发

概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更新也都是围绕扩展这一主题来进行了的,例如开发的Siri.iMessage Apps其实都是依靠扩展来工作的.在最新的Xcode 8 beta中也增加了众多的Extension 模板帮助开发者更快的实现不同类型的扩展.因此今天有必要介绍一下扩展相关的开发内容. 扩展的生命周期 iOS对于扩展的支持已经

ArcGIS 10.1 for Server 扩展开发(SOE)

原文连接:http://blog.csdn.net/arcgisserver_book/article/details/7869368 第一章为什么使用SOE 在ArcGIS 10.1中ArcGIS Server不在支持DCOM方式的连接,这也就意味着我们不能通过本地方式的连接使用ArcObjects提供的更多功能,所以我们推荐一种新的方式来实现这些功能,这种方式就是SOE服务器对象扩展,一个SOE(Server Object Extension)就是一个包含一组方法的类,这个类可以在SOC(A

php扩展开发

本文的环境是windows下开发php版本5.3 1.下载php5.3的源码包和php5.3的二进制包(平时使用的php程序包) 2.下载cygwin,并默认安装在c:\cygwin,因为生成php扩展框架的程序需要cygwin 3.假设php扩展的工作目录为d:\php,解压源码包和二进制包到这个目录 4.cmd命令行在d:\php\ext目录中运行 php ext_skel_win32.php --extname=yourext (如果php.exe程序的路劲未加入系统环境变量则需要自己指定

用UseMiddleware扩展方法注册中间件类

用UseMiddleware扩展方法注册中间件类 .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除了直接用ApplicationBuilder的Use()方法注册中间件外,还可以使用ApplicationBuilder的扩展方法UseMiddleware()注册中间件.这种情况下可以注册类型,这个方法会通过反射解析这个类型,并把它包装成Func<