liukuan.net

liukuan.net,发现,记录,分享

480

PHP内核探索:类的原型zend_class_entry

zend_class_entry是内核中定义的一个结构体,是内核实现PHP语言中类与对象的一个非常基础、关键的结构类型。他就相当于我们定义的类的原型。

如果我们想获得一个名字为myclass的类该怎么做呢?首先我们定义一个zend_class_entry变量,并为它设置名字,最后注册到runtime中去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code class='c'>
//为类定义一个全局指针
zend_class_entry *myclass_ce;
 
 
static zend_function_entry myclass_method[] = {
    { NULL, NULL, NULL }
};
 
ZEND_MINIT_FUNCTION(sample3)
{
    //初始类
    zend_class_entry ce;
 
    //"myclass"是这个类的名称。
    INIT_CLASS_ENTRY(ce, "myclass",myclass_method);
    //把地址给上面定义的全局指针,方便其他方法中调用
    myclass_ce = zend_register_internal_class(&ce TSRMLS_CC);
    return SUCCESS;
}
</code>

这样我们便定义了一个类myclass,而且我们可以正常的在PHP语言中使用它,比如:

1
2
3
4
5
<code class='php'>
<?php
$obj = new myclass();
?>
</code>

我们上面还定义了一个myclass_ce指针,他是干什么用的呢?当我们在扩展中对这个类进行操作,比如生成实例的时候,会使用到它,它的作用就类似与打开文件的操作句柄。

原文地址 : https://liukuan.net/php/72.html
本站遵循 : 知识共享署名-非商业性使用-相同方式共享 3.0 版权协议
版权声明 : 原创文章转载时,请务必以超链接形式标明 文章原始出处
作者:admin | 分类:php | 标签: Null
此文章共有条评论, 人参与 |Powerd By Angboo