zend引擎调用父方法


zend engine call parent method

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

如何正确执行此操作?

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

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

如果您想了解如何调用其他对象的方法,请开始遵循meta_parser中便利宏的链接。h。obj_call_method_internal_ex()确实是可重用的。(我花了很多精力来制作它们)