2012-08-15 95 views
2

在PHP中,它是有效的写是这样的:Zend引擎返回的对象引用

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

我怎样才能做到这里面Zend引擎?我想要一个方法来执行一些操作,然后返回类实例引用。

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

回答

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*