Php zend引擎返回对象引用

Php zend引擎返回对象引用,php,c,php-internals,Php,C,Php Internals,在php中,可以这样编写: <?php class Foo { public function bar() { return $this; } } ?> 如何在zend引擎内执行此操作?我需要一个方法来执行一些操作,然后返回类实例引用 此外,我想存储一些对象(来自其他类)并将它们作为其他方法的结果返回,是否应该存储它的zval*?返回引用的正确方法是什么?没错,您需要返回zval*。您需要为此使用RETURN\u ZVAL,声明如下: R

在php中,可以这样编写:

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

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


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

没错,您需要返回
zval*
。您需要为此使用
RETURN\u ZVAL
,声明如下:

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

要返回
$this
,请根据示例执行以下操作:

PHP_METHOD(Foo, bar)
{
     RETURN_ZVAL(getThis(), 1, 0);
}
在这里,
getThis()
zval*
返回给
$this
。如果愿意,您可以传递包含PHP对象的任何其他
zval*