4

PHP拡張機能で、次のPHPと同等のクラスを宣言したいと思います。

class MyClass
{
    public $MyMemberArray;

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

「高度なPHPプログラミング」と「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);
}

そしてこれはコンパイルされますが、構築時に同じランタイムエラーが発生します。

4

1 に答える 1