zend引擎返回对象引用

时间:2012-08-15 15:31:51

标签: php c php-internals

在php中,写下这样的东西是有效的:

<?php
class Foo
{
    public function bar()
    {
        return $this;
    }
}
?>

我如何在zend引擎内执行此操作?我想要一个方法来执行一些操作,然后返回类实例引用。

此外,我想存储一些对象(来自其他类)并返回它们作为其他一些方法的结果,我应该存储它zval*吗?返回引用的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

没错,您需要返回zval*。您需要使用RETURN_ZVAL,声明为:

RETURN_ZVAL(zv, ctor, dtor)

第一个参数zv是您的zval*。第二个ctor告诉Zend引擎使用复制构造函数(它用于维护refcount)。最后一个参数dtor告诉Zend引擎将析构函数应用于zv(也与refcount相关)。通常,除非您知道自己在做什么,否则最后两个参数应分别为10

返回$this,例如:

PHP_METHOD(Foo, bar)
{
     RETURN_ZVAL(getThis(), 1, 0);
}

此处,getThis()会将zval*返回给$this。如果需要,您可以传递包含PHP对象的任何其他zval*