您好,欢迎访问一九零五行业门户网

PHP开发入门1

一直都想学习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 booleanl 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里貌似木有... .
其它类似信息

推荐信息