2012-04-07 51 views
0

我还是新来写扩展。我试图让这个是结果:你如何创建一个私有财产作为一个类中的数组在内部分机

class FooClass { 
    private $elements = array(); 
} 

我得到实例化时,一个错误FooClass:

PHP致命错误:无法访问私有财产ArrayClass :: $元素

我确切地知道为什么发生这种情况,我只是不知道创建一个类定义为数组的正确方法。这是我到目前为止,我敢肯定,这是简单的:

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得到的来自PHP_MINIT_FUNCTION称为()。这里有一个类似的问题:How do I add an array as an Object Property to a class declared within a PHP extension?但它没有解决私有/受保护的访问。

THX

回答

0

最简单的方法很可能是使用zend_update_property

void zend_update_property(zend_class_entry *scope, zval *object, const char *name, int name_length, zval *value TSRMLS_DC);

name_length被排除终止。

相关问题