- return zend_read_property(Z_OBJCE_P(obj->proxy->object), obj->proxy->object, Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member), 0 TSRMLS_CC);
+#if PHP_HTTP_PPDBG
+ fprintf(stderr, "proxy_get: %s\n", Z_STRVAL_P(obj->proxy->member));
+#endif
+ if (Z_TYPE_P(obj->proxy->object) == IS_OBJECT) {
+ return zend_read_property(Z_OBJCE_P(obj->proxy->object), obj->proxy->object, Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member), 0 TSRMLS_CC);
+ } else {
+ zval **data = NULL;
+
+ if (SUCCESS == zend_symtable_find(Z_ARRVAL_P(obj->proxy->object), Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member)+1, (void *) &data)) {
+ Z_ADDREF_PP(data);
+ } else {
+ zval *unset;
+
+ MAKE_STD_ZVAL(unset);
+ ZVAL_NULL(unset);
+ zend_symtable_update(Z_ARRVAL_P(obj->proxy->object), Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member)+1, (void *) &unset, sizeof(zval *), (void *) &data);
+ }
+
+ return *data;
+ }
+
+ return NULL;