2

phpでは、次のように書くことが有効です。

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

Zend Engine内でこれを行うにはどうすればよいですか?メソッドでいくつかの操作を実行してから、クラスインスタンス参照を返します。

さらに、(他のクラスからの)いくつかのオブジェクトを保存し、他のいくつかのメソッドの結果としてそれらを返したいのですが、それを保存する必要がありzval*ますか?それへの参照を返す正しい方法は何ですか?

4

1 に答える 1

1

そうです、 を返す必要がありますzval*RETURN_ZVALこれには次のように宣言する必要があります。

RETURN_ZVAL(zv, ctor, dtor)

最初の引数zvは、あなたのzval*. 2 番目ctorは、コピー コンストラクターを使用するように Zend Engine に指示します (これは を維持するためのものですrefcount)。最後の引数はdtor、デストラクタを適用するように Zend Engine に指示しますzv(too に関連していrefcountます)。通常、自分が何をしているのかを理解していない限り、これらの最後の 2 つの引数はそれぞれ and にする必要が1あり0ます。

を返す$thisには、例ごとに:

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

ここでは、をにgetThis()戻します。必要に応じて、PHP オブジェクトを含む他のオブジェクトを渡すことができます。zval*$thiszval*

于 2012-08-16T16:03:52.713 に答える