}
/* }}} */
-static HashTable *dom_get_properties(zval *object)
+ /* {{{ dom_get_properties */
- dom_object *obj = Z_DOMOBJ_P(object);
++static HashTable *dom_get_properties(zend_object *object)
+ {
-static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp) /* {{{ */
++ dom_object *obj = php_dom_obj_from_obj(object);
+ HashTable *props = zend_std_get_properties(object);
+
+ if (obj->prop_handler != NULL) {
+ zend_string *key;
+ dom_prop_handler *hnd;
+
+ ZEND_HASH_FOREACH_STR_KEY_PTR(obj->prop_handler, key, hnd) {
+ zval val;
+
+ if (hnd->read_func(obj, &val) == SUCCESS) {
+ zend_hash_update(props, key, &val);
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+ return props;
+ }
+ /* }}} */
+
+static HashTable* dom_get_debug_info_helper(zend_object *object, int *is_temp) /* {{{ */
{
- dom_object *obj = Z_DOMOBJ_P(object);
+ dom_object *obj = php_dom_obj_from_obj(object);
HashTable *debug_info,
*prop_handlers = obj->prop_handler,
*std_props;
--- /dev/null
-int(35)
-int(35)
+ --TEST--
+ Bug #79065 (DOM classes do not expose properties to Reflection)
+ --SKIPIF--
+ <?php
+ if (!extension_loaded('dom')) die('skip dom extension not available');
+ ?>
+ --FILE--
+ <?php
+ $dom = new DOMDocument;
+ $dom->loadHTML('<b>test</b>');
+ var_dump(count(get_object_vars($dom)));
+
+ $ro = new ReflectionObject($dom);
+ var_dump(count($ro->getProperties()));
+ var_dump($ro->hasProperty("textContent"));
+ $rp = $ro->getProperty("textContent");
+ var_dump($rp);
+ var_dump($rp->getValue($dom));
+ ?>
+ --EXPECTF--
++int(38)
++int(38)
+ bool(true)
+ object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(11) "textContent"
+ ["class"]=>
+ string(11) "DOMDocument"
+ }
+ string(4) "test"