どのように私はPHP拡張モジュール内で宣言クラスへのオブジェクトのプロパティとして配列を追加するには?

StackOverflow https://stackoverflow.com/questions/1105360

質問

私は、次のPHPと同等のクラスを宣言するために私のPHP拡張を望んます:

class MyClass
{
    public $MyMemberArray;

    __construct()
    {
        $this->MyMemberArray = array();
    }
}

私は、高度なnoreferrer"> 拡張及び埋め込みPHP に」私はPHP_MINIT_FUNCTIONの整数特性を有するクラスを宣言することができるよ。

私はPHP_MINIT_FUNCTIONに配列プロパティを宣言するために同じアプローチを使用する場合、

しかし、私は、実行時に次のエラーメッセージが表示されます:

PHP Fatal error:  Internal zval's can't be arrays, objects or resources in Unknown on line 0
配列プロパティを作成し、コンストラクタを宣言する方法の高度なPHPプログラミングのページ557の例でありますが、例のコードはコンパイルされません(第2「オブジェクト」は冗長であるように思わ)。

私は、バグを修正し、自分のコードにそれを適応します:

PHP_METHOD(MyClass, __construct)
{
    zval *myarray;
    zval *pThis;

    pThis = getThis();

    MAKE_STD_ZVAL(myarray);

    array_init(myarray);
    zend_declare_property(Z_OBJCE_P(pThis), "MyMemberArray", sizeof("MyMemberArray"), myarray, ZEND_ACC_PUBLIC TSRMLS_DC);
}

そして、これはコンパイルが、それは建設に同じ実行時のエラーを与えます。

役に立ちましたか?

解決

答えはむしろadd_property_zval_ex()よりも、コンストラクタでzend_declare_property()を使用することです。

として、次の作品を意図します:

PHP_METHOD(MyClass, __construct)
{
    zval *myarray;
    zval *pThis;

    pThis = getThis();

    MAKE_STD_ZVAL(myarray);

    array_init(myarray);
    add_property_zval_ex(pThis, "MyMemberArray", sizeof("MyMemberArray"), myarray);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top