0

我现在正在尝试创建一个自定义 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();
}

如何正确执行此操作?

4

1 回答 1

1

如果它所做的只是初始化某些对象属性,则不应显式调用父构造函数。如果你这样做了,你最终会遇到一些讨厌的事情,比如错误的引用计数和 memleaks。例如,看看ASTTree 如何扩展 ASTNodeList

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

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

于 2012-08-03T21:09:36.707 回答