0

現在、カスタム php 拡張機能を作成しようとしていますが、直面している問題は、親メソッドを呼び出す方法がわからないことです。

クラス コンストラクターにいて、親のコンストラクターを呼び出すようなものです。

zval *object,
     fname;

object = getThis();
ZVAL_STRING(&fname, "parent::__construct", 0);

if(SUCCESS != call_user_function_ex(NULL, &object, &fname, NULL, 0, NULL, 1, NULL TSRMLS_CC))
{
    RETURN_NULL();
}

これを正しく行う方法は?

4

1 に答える 1

1

オブジェクトのプロパティの一部を初期化するだけの場合は、親のコンストラクターを明示的に呼び出すべきではありません。そうした場合、間違った参照カウントやメモリリークなどの厄介な問題が発生することになります。例として、ASTTree が ASTNodeList を拡張する方法を見てください。

重要な部分は、zend_object_handlersたとえばcreate_object_treeです。あなたがそれらのことをするべき場所があります。

他のオブジェクトのメソッドを呼び出す方法を確認したい場合は、meta_parser.hの便利なマクロからリンクをたどってください。obj_call_method_internal_ex()は本当に再利用可能です。(私はそれらをそのようにするために多くの努力をしました)

于 2012-08-03T21:09:36.707 に答える