PHP开发入门1

  1.    PHP开发入门1php

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

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

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

    最近,须要一个生成随机字符串的方法。以为原生PHP生成的有些慢(主要是想试试是否能够学会写扩展)。因而乎就用zehphir写了一个扩展。测试

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

    因而,仍是考虑用C吧。那么怎么开发呢?spa

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

    最终,我发现写扩展,主要就须要在几个地方添加定义,或添加功能便可。固然这里只是作个简单的函数而已。如何开发类,如今尚未看到,有资料的朋友能够提供一些。code

     首先,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里貌似木有... .
相关文章
相关标签/搜索