天天看点

八十、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;
}      
<?php
class sample implements i_myinterface
{
  public $name = "hello world!";
  
  public function hello()
  {
    echo $this->name."\n";
  }
}

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