在php中,写这样的东西是有效的:
<?php
class Foo
{
public function bar()
{
return $this;
}
}
?>
如何在 zend 引擎中执行此操作?我想要一个方法来执行一些操作,然后返回类实例引用。
此外,我想存储一些对象(来自其他类)并将它们作为其他一些方法的结果返回,我应该存储它zval*
吗?返回对它的引用的正确方法是什么?
错,您需要返回zval*
。为此,您需要使用 RETURN_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*
。