- 博客(13)
- 收藏
- 关注
原创 PHP插件更新对象与类属性的方法
更新对象与类的属性ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, char *name, int name_length TSRMLS_DC);ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval...
2015-11-29 15:06:11
254
原创 PHP插件定义类和接口
From: http://duanshaozhen.iteye.com/插件中所谓php的接口,是通过定义类的虚函数实现的。定义一个接口还是很方便的,我先给出一个PHP语言中的形式。
2015-11-29 11:21:29
237
原创 PHP插件为类定义常量
为类定义常量这个内容比较简单,只涉及到一组函数,可以查看Zend/zend_API.hZEND_API int zend_declare_class_constant(zend_class_entry *ce, const char *name, size_t name_length, zval *value TSRMLS_DC);ZEND_API int zend_declare_c...
2015-11-29 11:15:16
127
原创 PHP扩展之资源的使用
先描述下{资源}类型在内核中的结构://每一个资源都是通过它来实现的。typedef struct _zend_rsrc_list_entry{ void *ptr; int type; int refcount;}zend_rsrc_list_entry;在真实世界中,我们经常需要操作一些不好用标量值表现的数据,比如某个文件的句柄,而对于C来说,...
2015-11-29 10:16:56
486
原创 编写PHP扩展函数的参数类型绑定
我们看一下如何通过其实现类型绑定,但这个特性只能在Zend Engine 2也就是PHP5中使用。 让我们再回顾一下ZE2's argument info结构。每一个arg info结构的声明都是通过ZEND_BEGIN_ARG_INFO()或者ZEND_BEGIN_ARG_INFO_EX()宏函数开始的,然后紧跟着几行ZEND_ARG_*INFO()宏函数,最终以ZEND_END_ARG_INF...
2015-11-23 07:17:37
189
原创 编写PHP扩展函数的参数
函数的参数最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。 zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表着参数的个数。 紧接着需要传递给zend_pa...
2015-11-22 21:52:15
156
原创 编写PHP扩展函数返回值宏定义
#define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)#define ZVAL_TRUE(z) ZVAL_BOOL(z, 1)#define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l)#define RETVAL_BOOL(b) ZVAL_BOOL(return_val...
2015-11-22 19:12:11
332
原创 编写PHP扩展函数需要了解的宏定义
ZEND_FUNCTION()宏函数ZEND_FUNCTION()宏函数也可以写成PHP_FUNCTION(),但ZEND_FUNCTION()更前卫、标准一些,但两者是完全相同的。#define PHP_FUNCTION ZEND_FUNCTION #define ZEND_FUNCTION(name) ZEND_NAMED_FU...
2015-11-22 18:07:24
200
原创 PHP编译选项--with和--enable的说明
也许有人会问,为什么有的扩展的开启方式是 --enable-extname的形式,有的则是--with-extname的形式呢?其实两者并没有什么本质的不同,只不过enable多代表不依赖外部库便可以直接编译,而with大多需要依赖于第三方的lib。 现在,我们的扩展并不需要依赖其它的库文件,所以我们直接使用--enable便可以了。...
2015-11-22 17:51:15
1576
原创 PHP中的魔术变量
From: http://duanshaozhen.iteye.com/__LINE__ 文件中的当前行号。__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。__DIR__ 文件所在的目录。如...
2014-11-19 20:52:34
210
原创 PHP中的魔术方法
From: http://duanshaozhen.iteye.com/常用的魔术方法有:__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __s...
2014-11-19 20:48:35
93
原创 B- Tree 和 B+ Tree
一棵度为m的B-tree应满足的性质:每个结点的子结点个数≤m;根结点若不是叶子结点,它至少有两个子结点除根和叶子结点外,每个结点的子结点个数≥ [m/2]所有的叶子结点都出现在同一层,而且不带有信息非叶子结点若具有j+1个子结点,那么它包含j个关键字(其中,j≤m-1)B+树是B-树的变体。有几点不同的地方:非叶子结点的子树指针与关键字个数相同...
2014-11-03 20:10:22
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人