zend引擎调用父方法

时间:2012-08-03 20:47:04

标签: php c php-internals

我现在正在尝试创建一个自定义的php扩展,我面临的一个问题是我不知道如何调用父方法。

就像在类构造函数中并调用父的构造函数一样:

zval *object,
     fname;

object = getThis();
ZVAL_STRING(&fname, "parent::__construct", 0);

if(SUCCESS != call_user_function_ex(NULL, &object, &fname, NULL, 0, NULL, 1, NULL TSRMLS_CC))
{
    RETURN_NULL();
}

如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

如果只是初始化某些对象属性,则不应显式调用父代的构造函数。如果你这样做,你最终会得到错误的引用计数和memleaks等令人讨厌的事情。有关示例,请查看ASTTree extends ASTNodeList

的方式

关键部分是zend_object_handlers,例如create_object_tree。你应该在那里做那些事情。

如果您想了解如何调用其他对象的方法,请开始关注meta_parser.h便利宏的链接。 obj_call_method_internal_ex()真的可以重复使用。 (我已经付出了很多努力来制作它们)