- MAKE_STD_ZVAL(zglobal);
- ZVAL_BOOL(zglobal, global);
-
- MAKE_STD_ZVAL(zobj);
- Z_TYPE_P(zobj) = IS_OBJECT;
- Z_OBJVAL_P(zobj) = http_querystring_object_new(http_querystring_object_ce);
- zend_call_method_with_1_params(&zobj, Z_OBJCE_P(zobj), NULL, "__construct", NULL, zglobal);
+ if (!this_ptr) {
+ MAKE_STD_ZVAL(this_ptr);
+ Z_TYPE_P(this_ptr) = IS_OBJECT;
+ this_ptr->value.obj = http_querystring_object_new(http_querystring_object_ce);
+ }
+ if (global) {
+#ifdef ZEND_ENGINE_2
+ zend_is_auto_global("_SERVER", lenof("_SERVER") TSRMLS_CC);
+#endif
+ if ( (SUCCESS == zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void *) &_SERVER)) &&
+ (Z_TYPE_PP(_SERVER) == IS_ARRAY) &&
+ (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "QUERY_STRING", sizeof("QUERY_STRING"), (void *) &QUERY_STRING))) {
+
+ qstring = *QUERY_STRING;
+#ifdef ZEND_ENGINE_2
+ zend_is_auto_global("_GET", lenof("_GET") TSRMLS_CC);
+#endif
+ if ((SUCCESS == zend_hash_find(&EG(symbol_table), "_GET", sizeof("_GET"), (void *) &_GET)) && (Z_TYPE_PP(_GET) == IS_ARRAY)) {
+ qarray = *_GET;
+ } else {
+ http_error(HE_WARNING, HTTP_E_QUERYSTRING, "Could not acquire reference to superglobal GET array");
+ }
+ } else {
+ http_error(HE_WARNING, HTTP_E_QUERYSTRING, "Could not acquire reference to QUERY_STRING");
+ }
+
+ if (qarray && qstring) {
+ if (Z_TYPE_P(qstring) != IS_STRING) {
+ convert_to_string(qstring);
+ }
+
+ zend_update_property(THIS_CE, getThis(), ZEND_STRS("queryArray")-1, qarray TSRMLS_CC);
+ zend_update_property(THIS_CE, getThis(), ZEND_STRS("queryString")-1, qstring TSRMLS_CC);
+#ifdef Z_SET_ISREF
+ Z_SET_ISREF_P(zend_read_property(THIS_CE, getThis(), ZEND_STRS("queryArray")-1, 0 TSRMLS_CC));
+ Z_SET_ISREF_P(zend_read_property(THIS_CE, getThis(), ZEND_STRS("queryString")-1, 0 TSRMLS_CC));
+#else
+ zend_read_property(THIS_CE, getThis(), ZEND_STRS("queryArray")-1, 0 TSRMLS_CC)->is_ref = 1;
+ zend_read_property(THIS_CE, getThis(), ZEND_STRS("queryString")-1, 0 TSRMLS_CC)->is_ref = 1;
+#endif