【问题标题】:zend engine return object referencezend 引擎返回对象引用
【发布时间】:2012-08-11 22:17:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php c php-internals


    【解决方案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*

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 2011-06-22
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2015-10-26
      相关资源
      最近更新 更多