编程语言
首页 > 编程语言> > 八十、PHP内核探索:定义接口 ☞ 声明一个类似虚函数的东西

八十、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, hello, NULL) //注意这里的null指的是arginfo
	{NULL,NULL,NULL}
};

ZEND_MINIT_FUNCTION(test)
{	
	zend_class_entry ce;
	INIT_CLASS_ENTRY(ce, "i_myinterface", i_myinterface_method);

	i_myinterface_ce = zend_register_internal_interface(&ce TSRMLS_CC);
	return SUCCESS;
}

我们使用ZEND_ABSTRACT_ME()宏函数来为这个接口添加函数,它的作用是声明一个类似虚函数的东西,不用实现。也就是说我们不用为其添加ZEND_METHOD(i_myinterface,hello){...}的实现。但是这个宏函数只能为我们实现public类型的函数声明,如果有其它特殊需要,需要使用ZEND_FENTRY()宏函数来实现,因为ZEND_ABSTRACT_ME也不过是后者的一种封装。

下面我们在PHP语言中使用这个接口。

<?php
class sample implements i_myinterface
{
	public $name = "hello world!";
	
	public function hello()
	{
		echo $this->name."\n";
	}
}

$obj = new sample();
$obj->hello();
?>

标签:八十,NULL,函数,ZEND,ce,zend,myinterface,内核,PHP
来源: https://blog.csdn.net/qq_35458793/article/details/100573460