どのように私はPHP拡張モジュール内で宣言クラスへのオブジェクトのプロパティとして配列を追加するには?
-
12-09-2019 - |
質問
私は、次の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);
}
所属していません StackOverflow