我现在正在尝试创建一个自定义 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 extends ASTNodeList如何.
关键部分是zend_object_handlers
,例如create_object_tree
。你应该在那里做这些事情。
如果您想了解如何调用其他对象的方法,请开始关注 meta_parser.h 中的便捷宏链接。 。 obj_call_method_internal_ex()确实可以重复使用。 (我付出了很多努力才做到这一点)
关于php - zend引擎调用父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803069/