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);
}
そしてこれはコンパイルされますが、構築時に同じランタイムエラーが発生します。