文档章节

PHP开发入门1

字数 807
阅读 118
收藏 2
  1.    PHP开发入门1

  2. PHP开发入门2---->PHP扩展开发入门2 HELLO WORLD

  3. PHP扩展开发入门3------>带参数的函数

     一直都想学习PHP扩展开发。每当看到那么多的C代码就会觉得无从下手。有一次也用也开发了一个hello world。但是还是不甚理解。

    最近,需要一个生成随机字符串的方法。觉得原生PHP生成的有些慢(主要是想试试是否可以学会写扩展)。于是乎就用zehphir写了一个扩展。

    阿西吧。速度比原生的还慢。之前也测试过zephir,这个貌似不加载PHP原生函数的时候还可以,一旦调用原生函数,速度就会一降再降。所以想学zephir的,还是把他当作一种代码加密方式。

    于是,还是考虑用C吧。那么怎么开发呢?

    百度,谷歌等搜索出来一大堆教程。有很多都说让先写个def文件。这个我第一次做的时候就是用的这种方法。不过这次死活没有找到def的编写教程。于是找教程。

    最终,我发现写扩展,主要就需要在几个地方添加定义,或添加功能即可。当然这里只是做个简单的函数而已。如何开发类,现在还没有看到,有资料的朋友可以提供一些。

     首先,ext_skel生成扩展代码。

./ext_skel --extname=phpext

      然后,进入phpext目录,可以看到php_phpext.h和phpext.c。接下来首先打开php_phpext.h,找到如下代码

PHP_MINFO_FUNCTION(phpext);

在下面添加你想添加的函数,其中函数名称需要自定义一个英文字符串

PHP_FUNCTION(函数名称)

  接下来打开phpext.c,找到如下代码。这里是PHP入口函数,需要告诉PHP你都有哪些函数。

const zend_function_entry ukey_functions[] = {


}

   在其中输入你刚才添加的PHP函数名称

 PHP_FE(函数名称, NULL)

   下面就要放大招了。添加函数的功能。在phpext.c的最后添加功能

PHP_FUNCTION(函数名称)
{
//这里填写功能
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) //这里获取一个整形的  参数 。length需要前面定义,这里获取到的参数赋值给length
{
    RETURN_NULL();//返回null  
}
}

 

PHP 内置的返回函数

#define RETVAL_RESOURCE(l)				ZVAL_RESOURCE(return_value, l)
#define RETVAL_BOOL(b)					ZVAL_BOOL(return_value, b)
#define RETVAL_NULL() 					ZVAL_NULL(return_value)
#define RETVAL_LONG(l) 					ZVAL_LONG(return_value, l)
#define RETVAL_DOUBLE(d) 				ZVAL_DOUBLE(return_value, d)
#define RETVAL_STRING(s, duplicate) 		ZVAL_STRING(return_value, s, duplicate)
#define RETVAL_STRINGL(s, l, duplicate) 	ZVAL_STRINGL(return_value, s, l, duplicate)
#define RETVAL_EMPTY_STRING() 			ZVAL_EMPTY_STRING(return_value)
#define RETVAL_ZVAL(zv, copy, dtor)		ZVAL_ZVAL(return_value, zv, copy, dtor)
#define RETVAL_FALSE  					ZVAL_BOOL(return_value, 0)
#define RETVAL_TRUE   					ZVAL_BOOL(return_value, 1)

#define RETURN_RESOURCE(l) 				{ RETVAL_RESOURCE(l); return; }
#define RETURN_BOOL(b) 					{ RETVAL_BOOL(b); return; }
#define RETURN_NULL() 					{ RETVAL_NULL(); return;}
#define RETURN_LONG(l) 					{ RETVAL_LONG(l); return; }
#define RETURN_DOUBLE(d) 				{ RETVAL_DOUBLE(d); return; }
#define RETURN_STRING(s, duplicate) 	{ RETVAL_STRING(s, duplicate); return; }
#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
#define RETURN_EMPTY_STRING() 			{ RETVAL_EMPTY_STRING(); return; }
#define RETURN_ZVAL(zv, copy, dtor)		{ RETVAL_ZVAL(zv, copy, dtor); return; }
#define RETURN_FALSE  					{ RETVAL_FALSE; return; }
#define RETURN_TRUE   					{ RETVAL_TRUE; return; }

PHP  接收并格式化参数

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里貌似木有... .

 

© 著作权归作者所有

纵使有花兼明月何堪无酒亦无人

纵使有花兼明月何堪无酒亦无人

粉丝 37
博文 45
码字总数 18489
作品 2
安阳
后端工程师
私信 提问
加载中

评论(4)

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人 博主

引用来自“dryyun”的评论

你在哪个版本实现的,我 打开 php_phpext.h 文件 ,并没有 PHP_MINFO_FUNCTION(phpext); 代码

5.6
dryyun
dryyun
你在哪个版本实现的,我 打开 php_phpext.h 文件 ,并没有 PHP_MINFO_FUNCTION(phpext); 代码
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人 博主

引用来自“东方皓”的评论

写的不错

三克油
东方皓
东方皓
写的不错
archlinux清理一下空间

原网页 archlinux最近用的时候发现空间有点小了想清理一下 以前就知道安装包会本地缓存的可以使用命令 pacman -Scc 清理一下 我是从安装后就没有清理过,一清理多了一个多G的空间 还有我想到...

hongyi1159
2017/04/18
0
0
编程类开放书籍荟萃(转载)

关于开源图书有人在网络上做了大量整理,本文为大家刊载《免费的编程中文书籍索引》 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程...

行者PHPer
2016/10/09
197
0
PHP学习路线图 最全PHP自学指南

对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP,导致平白浪费了很多时间。本文将为大家带来最详细的php学习路线图,同时还会附上相应的权威教程,让广大PHP自学者少走许多弯路。 ...

W3Cschool小编
2018/04/24
0
0
免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

modernizr
2014/04/08
7.5K
24
免费的计算机编程类中文书籍

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

justjavac
2014/08/13
3K
10

没有更多内容

加载失败,请刷新页面

加载更多

maven插件加载类问题

https://www.cnblogs.com/coder-chi/p/11305498.html

Java搬砖工程师
29分钟前
32
0
(免费)霍兰德职业兴趣测试 在线测试霍兰德职业兴趣

霍兰德职业兴趣测试通过对你的个性进项测试评估,并为你关联到具体的职业。霍兰德职业兴趣量表是由美国著名的心理学教授霍兰德编制,具有广泛的应用和深度的职业兴趣理论。霍兰德职业兴趣量表...

蛤蟆丸子
31分钟前
74
0
在Linux中对pthread_create的未定义引用

我从https://computing.llnl.gov/tutorials/pthreads/在网络上获取了以下演示 #include <pthread.h>#include <stdio.h>#define NUM_THREADS 5void *PrintHello(void *threadid){ ......

javail
31分钟前
68
0
CAS原理分析及ABA问题详解

什么是CAS CAS即Compare And Swap的缩写,翻译成中文就是比较并交换,其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新,也就是CAS是原子...

Onegoleya
33分钟前
51
0
安卓版微信视频播放全屏处理

问题 在安卓版微信里,video在播放的时候,如果在没有做任何处理的情况下,微信会全屏播放你的视频,会严重影响一些例如直播之类的边看视频边交互的H5应用(注:在iOS里可以通过playsinline...

Jack088
43分钟前
61
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部