私はまだエクステンションを書くのが初めてです。私はこれを結果にしようとしています:
class FooClass {
private $elements = array();
}
FooClass をインスタンス化するときにエラーが発生します。
PHP 致命的なエラー: プライベート プロパティ ArrayClass::$elements にアクセスできません
なぜそれが起こっているのかは正確にわかっていますが、クラス定義を配列として作成する正しい方法がわかりません。これは私がこれまでに持っているものです。それは些細なことだと確信しています:
static zend_class_entry *foo_class_ptr;
void create_class_properties(TSRMLS_D) {
zend_declare_property_null(foo_class_ptr, "elements", strlen("elements"), ZEND_ACC_PRIVATE);
}
ZEND_METHOD(foo_class, __construct) {
zval *this = getThis();
zval *elements;
MAKE_STD_ZVAL(elements);
array_init(elements);
add_property_zval_ex(this, "elements", sizeof("elements"), elements);
}
static zend_function_entry foo_class_methods_def[] = {
PHP_ME(foo_class, __construct, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};
void create_class_def(TSRMLS_D) {
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "FooClass", foo_class_methods_def);
foo_class_ptr = zend_register_internal_class(&ce);
}
create_class_def get は PHP_MINIT_FUNCTION() から呼び出されます。ここにも同様の質問があります: PHP 拡張機能内で宣言されたクラスに配列をオブジェクト プロパティとして追加するにはどうすればよいですか? ただし、プライベート/保護されたアクセスには対応していません。
どうも