10.3 PHP中的面向对象(一)

定义一个接口还是很方便的,我先给出一个PHP语言中的形式。

  1. <?php
  2. interface i_myinterface
  3. {
  4. public function hello();
  5. }

那它在扩展中的实现是这样的。

  1. zend_class_entry *i_myinterface_ce;
  2. static zend_function_entry i_myinterface_method[]={
  3. ZEND_ABSTRACT_ME(i_myinterface, hello, NULL) //注意这里的null指的是arginfo
  4. {NULL,NULL,NULL}
  5. };
  6. ZEND_MINIT_FUNCTION(test)
  7. {
  8. zend_class_entry ce;
  9. INIT_CLASS_ENTRY(ce, "i_myinterface", i_myinterface_method);
  10. i_myinterface_ce = zend_register_internal_interface(&ce TSRMLS_CC);
  11. return SUCCESS;
  12. }

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

  1. <?php
  2. class sample implements i_myinterface
  3. {
  4. public $name = "hello world!";
  5. public function hello()
  6. {
  7. echo $this->name."\n";
  8. }
  9. }
  10. $obj = new sample();
  11. $obj->hello();