`
andrew__
  • 浏览: 8999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表

编译工具

autoconf
更新对象与类的属性 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 *object, char *name, int name_length, long value TSRMLS_DC); ZEND_API void zend_update_property_long(z ...
From: http://duanshaozhen.iteye.com/ 插件中所谓php的接口,是通过定义类的虚函数实现的。 定义一个接口还是很方便的,我先给出一个PHP语言中的形式。 <?php interface i_myinterface {     public function hello(); } 那它在扩展中的实现是这样的。 zend_class_entry *i_myinterface_ce; static zend_function_entry i_myinterface_method[]={     ZEND_ABSTRACT_ME(i_myinterface, ...
为类定义常量 这个内容比较简单,只涉及到一组函数,可以查看Zend/zend_API.h ZEND_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_class_constant_null(zend_class_entry *ce, const char *name, size_t name_length TSRMLS_DC); ZEND_API int z ...
先描述下{资源}类型在内核中的结构: //每一个资源都是通过它来实现的。 typedef struct _zend_rsrc_list_entry {     void *ptr;     int type;     int refcount; }zend_rsrc_list_entry; 在真实世界中,我们经常需要操作一些不好用标量值表现的数据,比如某个文件的句柄,而对于C来说,它也仅仅是个指针而已。 #include <stdio.h> int main(void) {     FILE *fd;     fd = fopen("/home/jdoe/.plan&quo ...
我们看一下如何通过其实现类型绑定,但这个特性只能在Zend Engine 2也就是PHP5中使用。 让我们再回顾一下ZE2's argument info结构。每一个arg info结构的声明都是通过ZEND_BEGIN_ARG_INFO()或者ZEND_BEGIN_ARG_INFO_EX()宏函数开始的,然后紧跟着几 ...
函数的参数 最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。 zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表着参数的个数。 紧接着需要传递给zend_parse_parameters()函数的参数是一个用于格式化的字符串,就像printf的第一个参数一样。下面表示了最常用的几个符号。 type_spec是格式化字符串,其常见的含义如下: 参数   代表着的 ...
#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_value, b) #define RETVAL_NULL() ZVAL_NULL(return_value) #define RETVAL_LONG(l) ZVAL_LONG(return_va ...
ZEND_FUNCTION()宏函数 ZEND_FUNCTION()宏函数也可以写成PHP_FUNCTION(),但ZEND_FUNCTION()更前卫、标准一些,但两者是完全相同的。 #define PHP_FUNCTION                ZEND_FUNCTION #define ZEND_FUNCTION(name)         ZEND_NAMED_FUNCTION(ZEND_FN(name)) #define ZEND_NAMED_FUNCTION(name)   void name(INTERNAL_FUNCTION_PARAMETERS) #define ...
也许有人会问,为什么有的扩展的开启方式是 --enable-extname的形式,有的则是--with-extname的形式呢?其实两者并没有什么本质的不同,只不过enable多代表不依赖外部库便可以直接编译,而with大多需要依赖于第三方的lib。 现在,我们的扩展并不需要依赖其它的库文件,所以我们直接使用--enable便可以了。
From: http://duanshaozhen.iteye.com/ __LINE__ 文件中的当前行号。 __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。 __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) __FUNCTION__ 函数名称(PH ...
From: http://duanshaozhen.iteye.com/ 常用的魔术方法有: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 自己对魔术方法的一些理解: 1、php对象在某些特定操作的时候,会调用特定的魔术方法。如构造对象时调用__construct()。 ...
一棵度为m的B-tree应满足的性质: 每个结点的子结点个数≤m; 根结点若不是叶子结点,它至少有两个子结点 除根和叶子结点外,每个结点的子结点个数≥ [m/2] 所有的叶子结点都出现在同一层,而且不带有信息 非叶子结点若具有j+1个子结点,那么它包含j个关键字(其中,j≤m-1) B+树是B-树的变体。 有几点不同的地方: 非叶子结点的子树指针与关键字个数相同 为所有叶子结点增加一个链指针 所有关键字都在叶子结点出现
Global site tag (gtag.js) - Google Analytics