php - zend引擎调用父方法

标签 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();
}

如何正确执行此操作?

最佳答案

如果父级的构造函数所做的只是初始化某些对象属性,则不应显式调用它。如果你这样做,你最终会遇到一些令人讨厌的事情,比如错误的引用计数和内存泄漏。举个例子,看看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/

相关文章:

php - 有人熟悉PHP源代码吗?

php - 使用内存引用比较 PHP 数组

php - Wordpress WP-ADMIN 您没有足够的权限访问此页面。

php - 记录 mysql 结果和计时

php - 有没有办法从关闭功能中知道退出状态代码?

C - 内存泄漏故障排除

c - 如何在c中的while循环内同步进程

php - 日期时间不会在数据库中更新

c - 函数 main 中的表达式语法 (Turbo-C)

c - zend 自定义模块