我现在正在尝试创建一个自定义的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();
}
如何正确地做到这一点?
答案 0 :(得分:1)
如果只是初始化某些对象属性,则不应显式调用父代的构造函数。如果你这样做,你最终会得到错误的引用计数和memleaks等令人讨厌的事情。有关示例,请查看ASTTree extends ASTNodeList。
的方式关键部分是zend_object_handlers
,例如create_object_tree
。你应该在那里做那些事情。
如果您想了解如何调用其他对象的方法,请开始关注meta_parser.h中便利宏的链接。 obj_call_method_internal_ex()真的可以重复使用。 (我已经付出了很多努力来制作它们)