PHP_METHOD(test_class,__construct); zend_class_entry *test_class_ce_ptr = NULL;
static zend_function_entry test_class_functions[] = { PHP_ME(test_class, __construct, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} };
And then I put this in my MINIT function:
INIT_CLASS_ENTRY(ce, "test_class", test_class_functions); test_class_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); zend_declare_property_null(test_class_ce_ptr, "test_property", sizeof("test_property")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
And I make test_class's constructor look like this:
PHP_METHOD(test_class, __construct) {
zval *tmp = NULL;
ALLOC_ZVAL(tmp);
tmp->is_ref = 0;
tmp->refcount = 0;
array_init(tmp);
add_next_index_long(tmp, 100);
zend_update_property(test_class_ce_ptr, this_ptr, "test_property", sizeof("test_property")-1, tmp TSRMLS_CC);
}
Then this PHP program:
$e = new test_class(); print new ReflectionClass($e); var_dump($e);
Prints:
Class [ <internal> class test_class ] {
- Constants [0] { }
- Static properties [0] { }
- Static methods [0] { }
- Properties [1] { Property [ <default> public $test_property ] }
- Methods [1] { Method [ <internal> <ctor> public method __construct ] { } } } object(test_class)#1 (1) { ["test_property"]=> array(1) { [0]=> int(100) } }
So it would be handy (since all the property creation would be in one place and there wouldn't be the confusing inference from reading the code that the property is NULL) if I could create the array zval in MINIT instead of in the constructor.
David
Marcus Boerger wrote:
Hello David,
i did most of these functions but have no idea how to create default arrays. If you find out please tell us.
marcus
Thursday, May 13, 2004, 9:29:02 PM, you wrote:
zend_declare_property() tells me that I can't use it to create a class property that is an array. Why is that? What is the recommended way to create an array class property?
Thanks, David
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php