]> granicus.if.org Git - php/commitdiff
Change the order of properties used for var_dump(), serialize(), comparison, etc.
authorDmitry Stogov <dmitry@zend.com>
Fri, 26 Feb 2021 16:27:55 +0000 (19:27 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 1 Mar 2021 10:29:49 +0000 (13:29 +0300)
Now properties are ordered according to their layout in zend_object structure.

35 files changed:
Zend/tests/bug27798.phpt
Zend/tests/bug60536_003.phpt
Zend/tests/bug79862.phpt
Zend/tests/get_mangled_object_vars.phpt
Zend/tests/objects_033.phpt
Zend/tests/traits/property008.phpt
Zend/zend_object_handlers.c
ext/date/tests/DateTimeZone_clone_basic2.phpt
ext/date/tests/DateTime_clone_basic2.phpt
ext/dom/tests/dom003.phpt
ext/dom/tests/dom_set_attr_node.phpt
ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt
ext/pdo/tests/pdo_005.phpt
ext/pdo/tests/pdo_018.phpt
ext/pdo/tests/pdo_023.phpt
ext/soap/tests/classmap003.phpt
ext/standard/tests/array/array_fill_object.phpt
ext/standard/tests/array/array_filter_object.phpt
ext/standard/tests/array/array_unshift_object.phpt
ext/standard/tests/array/uasort_object2.phpt
ext/standard/tests/array/usort_object2.phpt
ext/standard/tests/class_object/get_object_vars_basic_001.phpt
ext/standard/tests/class_object/get_object_vars_basic_002.phpt
ext/standard/tests/serialize/__serialize_005.phpt
ext/standard/tests/serialize/bug76300.phpt
ext/standard/tests/serialize/serialization_objects_011.phpt
ext/zip/tests/bug38943.phpt
ext/zip/tests/bug38943_2.phpt
tests/classes/clone_003.phpt
tests/classes/clone_004.phpt
tests/classes/constants_basic_004.phpt
tests/classes/ctor_dtor_inheritance.phpt
tests/classes/inheritance_006.phpt
tests/classes/private_members.phpt
tests/lang/foreachLoopObjects.002.phpt

index 310fd97991cbbda51a2e070c298e177f8b9e58c0..c16c5c825d4f7d9d05e01c1f7d84664e78415189 100644 (file)
@@ -57,12 +57,12 @@ array(3) {
 }
 Child::__construct
 array(3) {
-  ["Baz"]=>
-  int(4)
   ["Foo"]=>
   int(1)
   ["Bar"]=>
   int(2)
+  ["Baz"]=>
+  int(4)
 }
 array(1) {
   ["Foo"]=>
index 3ba23b9288ed439c014d6f7461cea868a4a17d5f..8696591bb2c95de313790dca006a0e3395307deb 100644 (file)
@@ -32,14 +32,14 @@ var_dump($b);
 ?>
 --EXPECTF--
 object(SubclassA)#%d (2) {
-  ["hello":"SubclassA":private]=>
-  int(0)
   ["hello":"BaseWithPropA":private]=>
   int(0)
+  ["hello":"SubclassA":private]=>
+  int(0)
 }
 object(SubclassB)#%d (2) {
-  ["hello":"SubclassB":private]=>
-  int(0)
   ["hello":"BaseWithTPropB":private]=>
   int(0)
+  ["hello":"SubclassB":private]=>
+  int(0)
 }
index b923da78b463eebd6204d3ad2956d37119d8a012..a04dc5c9ac771073d6e80e734fbd3f401e178aec 100644 (file)
@@ -45,14 +45,14 @@ NULL
 NULL
 NULL
 object(c)#1 (6) {
-  ["prop1"]=>
-  int(1)
-  ["prop2":protected]=>
-  int(2)
   ["prop3":"a":private]=>
   int(3)
   ["prop4":"a":private]=>
   int(4)
+  ["prop1"]=>
+  int(1)
+  ["prop2":protected]=>
+  int(2)
   ["prop5"]=>
   int(5)
   ["prop6"]=>
index 735548579e24c4c4bec98ddcc5fc28a9644be4f9..f9ad008a33c37e9cf784286a9c55b0aa81ae47bf 100644 (file)
@@ -33,10 +33,10 @@ echo "\n";
 ?>
 --EXPECT--
 array (
-  '' . "\0" . 'B' . "\0" . 'priv' => 4,
   'pub' => 1,
   '' . "\0" . '*' . "\0" . 'prot' => 2,
   '' . "\0" . 'A' . "\0" . 'priv' => 3,
+  '' . "\0" . 'B' . "\0" . 'priv' => 4,
   'dyn' => 5,
   6 => 6,
 )
index 3c198644901eaaef204dd1a70fbd53fd4bbc199b..edb722b04015ef661105eb9e4519ca4724c56346 100644 (file)
@@ -24,5 +24,5 @@ print_r($a, true);
 var_dump($a < $b);
 ?>
 --EXPECT--
-bool(false)
-bool(false)
+bool(true)
+bool(true)
index ff265be2a02bccea102496828afdaa1bb5ab19f8..d4d57f379afa83dbc9e788ecd5b348a0a29d1650 100644 (file)
@@ -42,20 +42,20 @@ var_dump($b);
 ?>
 --EXPECT--
 object(SubclassClassicInheritance)#1 (2) {
-  ["hello":"SubclassClassicInheritance":private]=>
-  int(0)
   ["hello":"BaseWithPropA":private]=>
   int(0)
+  ["hello":"SubclassClassicInheritance":private]=>
+  int(0)
 }
 object(SubclassA)#2 (2) {
-  ["hello":"SubclassA":private]=>
-  int(0)
   ["hello":"BaseWithPropA":private]=>
   int(0)
+  ["hello":"SubclassA":private]=>
+  int(0)
 }
 object(SubclassB)#3 (2) {
-  ["hello":"SubclassB":private]=>
-  int(0)
   ["hello":"BaseWithTPropB":private]=>
   int(0)
+  ["hello":"SubclassB":private]=>
+  int(0)
 }
index b903afb8ba5c64dc254826466546229d50976eea..94d2ff8cf4486dc6f23abd8c59420dfd7a01f7d9 100644 (file)
@@ -63,41 +63,24 @@ ZEND_API void rebuild_object_properties(zend_object *zobj) /* {{{ */
        if (!zobj->properties) {
                zend_property_info *prop_info;
                zend_class_entry *ce = zobj->ce;
-               uint32_t flags = 0;
+               int i;
 
                zobj->properties = zend_new_array(ce->default_properties_count);
                if (ce->default_properties_count) {
                        zend_hash_real_init_mixed(zobj->properties);
-                       ZEND_HASH_FOREACH_PTR(&ce->properties_info, prop_info) {
-                               if (!(prop_info->flags & ZEND_ACC_STATIC)) {
-                                       flags |= prop_info->flags;
+                       for (i = 0; i < ce->default_properties_count; i++) {
+                               prop_info = ce->properties_info_table[i];
 
-                                       if (UNEXPECTED(Z_TYPE_P(OBJ_PROP(zobj, prop_info->offset)) == IS_UNDEF)) {
-                                               HT_FLAGS(zobj->properties) |= HASH_FLAG_HAS_EMPTY_IND;
-                                       }
-
-                                       _zend_hash_append_ind(zobj->properties, prop_info->name,
-                                               OBJ_PROP(zobj, prop_info->offset));
+                               if (!prop_info) {
+                                       continue;
                                }
-                       } ZEND_HASH_FOREACH_END();
-                       if (flags & ZEND_ACC_CHANGED) {
-                               while (ce->parent && ce->parent->default_properties_count) {
-                                       ce = ce->parent;
-                                       ZEND_HASH_FOREACH_PTR(&ce->properties_info, prop_info) {
-                                               if (prop_info->ce == ce &&
-                                                   !(prop_info->flags & ZEND_ACC_STATIC) &&
-                                                   (prop_info->flags & ZEND_ACC_PRIVATE)) {
-                                                       zval zv;
-
-                                                       if (UNEXPECTED(Z_TYPE_P(OBJ_PROP(zobj, prop_info->offset)) == IS_UNDEF)) {
-                                                               HT_FLAGS(zobj->properties) |= HASH_FLAG_HAS_EMPTY_IND;
-                                                       }
-
-                                                       ZVAL_INDIRECT(&zv, OBJ_PROP(zobj, prop_info->offset));
-                                                       zend_hash_add(zobj->properties, prop_info->name, &zv);
-                                               }
-                                       } ZEND_HASH_FOREACH_END();
+
+                               if (UNEXPECTED(Z_TYPE_P(OBJ_PROP(zobj, prop_info->offset)) == IS_UNDEF)) {
+                                       HT_FLAGS(zobj->properties) |= HASH_FLAG_HAS_EMPTY_IND;
                                }
+
+                               _zend_hash_append_ind(zobj->properties, prop_info->name,
+                                       OBJ_PROP(zobj, prop_info->offset));
                        }
                }
        }
@@ -1555,6 +1538,7 @@ ZEND_API int zend_std_compare_objects(zval *o1, zval *o2) /* {{{ */
        }
        if (!zobj1->properties && !zobj2->properties) {
                zend_property_info *info;
+               int i;
 
                if (!zobj1->ce->default_properties_count) {
                        return 0;
@@ -1570,14 +1554,18 @@ ZEND_API int zend_std_compare_objects(zval *o1, zval *o2) /* {{{ */
                }
                Z_PROTECT_RECURSION_P(o1);
 
-               ZEND_HASH_FOREACH_PTR(&zobj1->ce->properties_info, info) {
-                       zval *p1 = OBJ_PROP(zobj1, info->offset);
-                       zval *p2 = OBJ_PROP(zobj2, info->offset);
+               for (i = 0; i < zobj1->ce->default_properties_count; i++) {
+                       zval *p1, *p2;
+
+                       info = zobj1->ce->properties_info_table[i];
 
-                       if (info->flags & ZEND_ACC_STATIC) {
+                       if (!info) {
                                continue;
                        }
 
+                       p1 = OBJ_PROP(zobj1, info->offset);
+                       p2 = OBJ_PROP(zobj2, info->offset);
+
                        if (Z_TYPE_P(p1) != IS_UNDEF) {
                                if (Z_TYPE_P(p2) != IS_UNDEF) {
                                        int ret;
@@ -1597,7 +1585,7 @@ ZEND_API int zend_std_compare_objects(zval *o1, zval *o2) /* {{{ */
                                        return 1;
                                }
                        }
-               } ZEND_HASH_FOREACH_END();
+               }
 
                Z_UNPROTECT_RECURSION_P(o1);
                return 0;
index b41eeddfbddac18625f25e3b58e04305a1ce27c4..f7f81cb275a85ffca4e6ed565a03bf6aba7f5199 100644 (file)
@@ -51,28 +51,28 @@ object(DateTimeZoneExt1)#%d (4) {
   string(13) "Europe/London"
 }
 object(DateTimeZoneExt2)#%d (6) {
-  ["property3"]=>
-  bool(true)
-  ["property4"]=>
-  float(10.5)
   ["property1"]=>
   int(99)
   ["property2"]=>
   string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
   string(13) "Europe/London"
 }
 object(DateTimeZoneExt2)#%d (6) {
-  ["property3"]=>
-  bool(true)
-  ["property4"]=>
-  float(10.5)
   ["property1"]=>
   int(99)
   ["property2"]=>
   string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
index 261879283ed886346012544d687d0c47e64f40ab..439bf4b23f6f2969ba523bac4944c91e18fa6ddd 100644 (file)
@@ -55,14 +55,14 @@ object(DateTimeExt1)#%d (5) {
   string(3) "GMT"
 }
 object(DateTimeExt2)#%d (7) {
-  ["property3"]=>
-  bool(true)
-  ["property4"]=>
-  float(10.5)
   ["property1"]=>
   int(99)
   ["property2"]=>
   string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
   ["date"]=>
   string(26) "2009-02-03 12:34:41.000000"
   ["timezone_type"]=>
@@ -71,14 +71,14 @@ object(DateTimeExt2)#%d (7) {
   string(3) "GMT"
 }
 object(DateTimeExt2)#%d (7) {
-  ["property3"]=>
-  bool(true)
-  ["property4"]=>
-  float(10.5)
   ["property1"]=>
   int(99)
   ["property2"]=>
   string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
   ["date"]=>
   string(26) "2009-02-03 12:34:41.000000"
   ["timezone_type"]=>
index 20db09d40eb3a856df190457279efc64b4dafd36..d846995db52106a14dbabe7be885634dc5b8a6ae 100644 (file)
@@ -30,6 +30,8 @@ object(DOMException)#%d (%d) {
   string(23) "Hierarchy Request Error"
   ["string":"Exception":private]=>
   string(0) ""
+  ["code"]=>
+  int(3)
   ["file":protected]=>
   string(%d) "%sdom003.php"
   ["line":protected]=>
@@ -57,8 +59,6 @@ object(DOMException)#%d (%d) {
   }
   ["previous":"Exception":private]=>
   NULL
-  ["code"]=>
-  int(3)
 }
 --- Don't catch exception with try/catch
 
index 6160cd48f211c063dca2c5973814127ece7d59a1..bb573ffda0b50ad11760860e57e8f1d03f00d499 100644 (file)
@@ -40,6 +40,8 @@ object(DOMException)#%d (7) {
   string(20) "Wrong Document Error"
   ["string":"Exception":private]=>
   string(0) ""
+  ["code"]=>
+  int(4)
   ["file":protected]=>
   string(%d) "%sdom_set_attr_node.php"
   ["line":protected]=>
@@ -67,6 +69,4 @@ object(DOMException)#%d (7) {
   }
   ["previous":"Exception":private]=>
   NULL
-  ["code"]=>
-  int(4)
 }
index 8ac3a049a16b8da97426bca2cc46d29e4fef39ef..91a8c0a556f1077392c3c98c0bf35cfd883bb894 100644 (file)
@@ -291,23 +291,23 @@ string(1) "a"
 reference, object, forward declaration...
 int(1)
 object(bar)#%d (2) {
-  ["bar"]=>
-  &string(1) "a"
   ["foo"]=>
   &string(1) "a"
+  ["bar"]=>
+  &string(1) "a"
 }
 string(1) "a"
 references, object, private...
 int(1)
 string(1) "a"
 object(mega_bar)#5 (4) {
+  ["foo"]=>
+  &string(1) "a"
+  ["bar"]=>
+  &string(1) "a"
   [%s]=>
   &int(1)
   ["id_ref"]=>
   &int(1)
-  ["bar"]=>
-  &string(1) "a"
-  ["foo"]=>
-  &string(1) "a"
 }
 done!
index 25eab7782fc6323771938b2e232d73f40cc10283..1427028a9fc97d3a551ec4cbd87ba65545480bac 100644 (file)
@@ -114,40 +114,40 @@ TestDerived::__construct(2,3)
 array(3) {
   [0]=>
   object(TestDerived)#%d (5) {
-    ["row":protected]=>
-    int(0)
     ["id"]=>
     string(1) "1"
     ["val":protected]=>
     string(1) "A"
     ["val2":"TestBase":private]=>
     NULL
+    ["row":protected]=>
+    int(0)
     ["val2"]=>
     string(2) "AA"
   }
   [1]=>
   object(TestDerived)#%d (5) {
-    ["row":protected]=>
-    int(1)
     ["id"]=>
     string(1) "2"
     ["val":protected]=>
     string(1) "B"
     ["val2":"TestBase":private]=>
     NULL
+    ["row":protected]=>
+    int(1)
     ["val2"]=>
     string(2) "BB"
   }
   [2]=>
   object(TestDerived)#%d (5) {
-    ["row":protected]=>
-    int(2)
     ["id"]=>
     string(1) "3"
     ["val":protected]=>
     string(1) "C"
     ["val2":"TestBase":private]=>
     NULL
+    ["row":protected]=>
+    int(2)
     ["val2"]=>
     string(2) "CC"
   }
index d35e078b32de450f7f4034a74ba798b4da63e5bb..de033823535d717195204163cfc2bfe15be51e29 100644 (file)
@@ -206,9 +206,9 @@ array(4) {
 ===INSERT===
 TestBase::serialize() = 'a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'
 TestDerived::serialize()
-TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'
+TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'
 TestDerived::serialize()
-TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'
+TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'
 ===DATA===
 array(4) {
   [0]=>
@@ -216,9 +216,9 @@ array(4) {
   [1]=>
   string(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
   [2]=>
-  string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
+  string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
   [3]=>
-  string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
+  string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
 }
 ===FAILURE===
 Exception:SQLSTATE[HY000]: General error: cannot unserialize class
@@ -238,22 +238,22 @@ array(3) {
     ["name"]=>
     string(11) "TestDerived"
     ["val"]=>
-    string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
+    string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
   }
   [2]=>
   array(2) {
     ["name"]=>
     NULL
     ["val"]=>
-    string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"
+    string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"
   }
 }
 ===FETCHCLASS===
 TestBase::unserialize(a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})
 TestDerived::unserialize()
-TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})
+TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})
 TestDerived::unserialize()
-TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})
+TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:7:"BasePri";s:7:"Private";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})
 array(3) {
   [0]=>
   object(TestBase)#%d (3) {
@@ -270,14 +270,14 @@ array(3) {
     string(14) "#DerivedPublic"
     ["BasePro":protected]=>
     string(17) "#DerivdeProtected"
+    ["BasePri":"TestBase":private]=>
+    string(8) "#Private"
     ["DerivedPub"]=>
     string(7) "#Public"
     ["DerivedPro":protected]=>
     string(10) "#Protected"
     ["DerivedPri":"TestDerived":private]=>
     string(7) "Private"
-    ["BasePri":"TestBase":private]=>
-    string(8) "#Private"
   }
   [2]=>
   object(TestLeaf)#%d (6) {
@@ -285,13 +285,13 @@ array(3) {
     string(14) "#DerivedPublic"
     ["BasePro":protected]=>
     string(17) "#DerivdeProtected"
+    ["BasePri":"TestBase":private]=>
+    string(8) "#Private"
     ["DerivedPub"]=>
     string(7) "#Public"
     ["DerivedPro":protected]=>
     string(10) "#Protected"
     ["DerivedPri":"TestDerived":private]=>
     string(7) "Private"
-    ["BasePri":"TestBase":private]=>
-    string(8) "#Private"
   }
 }
index 834c99309e66e5f4321ccbfdc97944a8af48f022..ee38f98cac1c50d4224c2551448d3a61056ab452 100644 (file)
@@ -95,10 +95,10 @@ PDOStatementX::__destruct()
 PDODatabaseX::query()
 PDOStatementX::__construct()
 object(PDOStatementX)#%d (3) {
-  ["test1"]=>
-  int(1)
   ["queryString"]=>
   string(24) "SELECT val, id FROM test"
+  ["test1"]=>
+  int(1)
   ["test2"]=>
   int(22)
 }
index 3150c4be81a42578a35c5874b0a27c008ff810e2..c7ea7a02ddf120f30a29aa9bb4ac4f105b4d4854 100644 (file)
@@ -49,6 +49,6 @@ print_r($client->f());
 --EXPECT--
 B Object
 (
-    [y] => 6
     [x] => 5
+    [y] => 6
 )
index 58fd5326321e0ce71ac8a47cd92eac561a16d185..b7b6d348f553edd48c9e8e701e726ce1a04999d5 100644 (file)
@@ -235,25 +235,25 @@ array(2) {
 array(2) {
   [0]=>
   object(Child_test1)#%d (4) {
-    ["member2"]=>
-    int(102)
     ["member1"]=>
     int(100)
     ["var1"]=>
     int(30)
     ["var2"]=>
     int(101)
+    ["member2"]=>
+    int(102)
   }
   [1]=>
   object(Child_test1)#%d (4) {
-    ["member2"]=>
-    int(102)
     ["member1"]=>
     int(100)
     ["var1"]=>
     int(30)
     ["var2"]=>
     int(101)
+    ["member2"]=>
+    int(102)
   }
 }
 -- Iteration 4 --
@@ -281,25 +281,25 @@ array(2) {
 array(2) {
   [0]=>
   object(Child_test2)#%d (4) {
-    ["member1":"Child_test2":private]=>
-    int(102)
+    ["member1":"Test2":private]=>
+    int(100)
     ["var1"]=>
     int(30)
     ["var2"]=>
     int(101)
-    ["member1":"Test2":private]=>
-    int(100)
+    ["member1":"Child_test2":private]=>
+    int(102)
   }
   [1]=>
   object(Child_test2)#%d (4) {
-    ["member1":"Child_test2":private]=>
-    int(102)
+    ["member1":"Test2":private]=>
+    int(100)
     ["var1"]=>
     int(30)
     ["var2"]=>
     int(101)
-    ["member1":"Test2":private]=>
-    int(100)
+    ["member1":"Child_test2":private]=>
+    int(102)
   }
 }
 -- Iteration 6 --
@@ -369,25 +369,25 @@ array(2) {
 array(2) {
   [0]=>
   object(Child_test4)#%d (4) {
-    ["var1"]=>
-    int(103)
     ["member1"]=>
     int(100)
     ["member2":"Test4":private]=>
     int(101)
     ["member3":protected]=>
     int(102)
+    ["var1"]=>
+    int(103)
   }
   [1]=>
   object(Child_test4)#%d (4) {
-    ["var1"]=>
-    int(103)
     ["member1"]=>
     int(100)
     ["member2":"Test4":private]=>
     int(101)
     ["member3":protected]=>
     int(102)
+    ["var1"]=>
+    int(103)
   }
 }
 -- Iteration 10 --
index 9b10d20aea3b37b5263432338cb3a1db6963f22b..0c2b175e25e0f7cd2b0036db6a3de7614e1867ed 100644 (file)
@@ -105,10 +105,10 @@ array(5) {
   }
   [2]=>
   object(ChildClass)#%d (2) {
-    ["var3":"ChildClass":private]=>
-    NULL
     ["var2":protected]=>
     int(5)
+    ["var3":"ChildClass":private]=>
+    NULL
   }
   [3]=>
   object(FinalClass)#%d (1) {
@@ -130,10 +130,10 @@ array(5) {
   }
   [2]=>
   object(ChildClass)#%d (2) {
-    ["var3":"ChildClass":private]=>
-    NULL
     ["var2":protected]=>
     int(5)
+    ["var3":"ChildClass":private]=>
+    NULL
   }
   [3]=>
   object(FinalClass)#%d (1) {
index 1feda5bf9662cac5a3abd81cd6a09d23e5e83633..02abff3d1e475da1acda096c2406c7dbae388f0c 100644 (file)
@@ -173,10 +173,10 @@ int(5)
 array(5) {
   [0]=>
   object(ChildClass)#%d (2) {
-    ["var3":"ChildClass":private]=>
-    NULL
     ["var2":protected]=>
     int(5)
+    ["var3":"ChildClass":private]=>
+    NULL
   }
   ["f"]=>
   string(5) "first"
@@ -191,10 +191,10 @@ int(7)
 array(7) {
   [0]=>
   object(ChildClass)#%d (2) {
-    ["var3":"ChildClass":private]=>
-    NULL
     ["var2":protected]=>
     int(5)
+    ["var3":"ChildClass":private]=>
+    NULL
   }
   [1]=>
   string(5) "hello"
index 82a9cb908b1ffbf25f7b69f9c4185b258e8ffd71..6217a44b9b168218efadf4d427d2d4d759342d25 100644 (file)
@@ -146,31 +146,31 @@ bool(true)
 array(4) {
   [2]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(15)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(15)
   }
   [0]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(20)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(20)
   }
   [1]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(500)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(500)
   }
   [3]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(700)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(700)
   }
 }
 Done
index cdb91d402774a7d5e975ca30d18690f02d536e93..abc42b736bdc96ec93f8e11601ad9e23d62f208a 100644 (file)
@@ -129,30 +129,30 @@ bool(true)
 array(4) {
   [0]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(15)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(15)
   }
   [1]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(20)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(20)
   }
   [2]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(500)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(500)
   }
   [3]=>
   object(ChildClass)#%d (2) {
-    ["child_value"]=>
-    int(700)
     ["pub_value"]=>
     NULL
+    ["child_value"]=>
+    int(700)
   }
 }
index babd381a08c62415eca97bb0d8dd0ff3057b1822..8f647ace0b5b8b92ea707b31cb3d5facf08e1253 100644 (file)
@@ -84,12 +84,12 @@ array(2) {
 ---( Superclass: )---
 A::test
 array(3) {
+  ["hiddenPriv"]=>
+  string(13) "A::hiddenPriv"
   ["prot"]=>
   string(7) "B::prot"
   ["pub"]=>
   string(6) "B::pub"
-  ["hiddenPriv"]=>
-  string(13) "A::hiddenPriv"
 }
 
 ---( Unrelated class: )---
index 313a53ac8829ba09fabb01f42f3153b394bf0fdd..5e7ef736f77aea4af07d9ffdd18f45913c88ea5b 100644 (file)
@@ -48,10 +48,10 @@ array(4) {
 ---( Superclass: )---
 A::testA
 array(3) {
+  ["hiddenPriv"]=>
+  string(13) "A::hiddenPriv"
   ["prot"]=>
   string(7) "B::prot"
   ["pub"]=>
   string(6) "B::pub"
-  ["hiddenPriv"]=>
-  string(13) "A::hiddenPriv"
 }
index 3656a034b361ec31aaf5b7fb8ed1c216c52ba7dc..c65c0cdec8c707fa78466cb2c5a59206cbc8717f 100644 (file)
@@ -41,13 +41,13 @@ var_dump(unserialize($s));
 --EXPECT--
 string(63) "O:1:"B":2:{i:0;a:1:{i:0;O:8:"stdClass":0:{}}i:1;a:1:{i:0;r:3;}}"
 object(B)#3 (2) {
-  ["data2":"B":private]=>
+  ["data":"A":private]=>
   array(1) {
     [0]=>
     object(stdClass)#4 (0) {
     }
   }
-  ["data":"A":private]=>
+  ["data2":"B":private]=>
   array(1) {
     [0]=>
     object(stdClass)#4 (0) {
index f8636dc9a5e460738342eb960818356c2db5d783..ef7536e0db937b8f7f767fc61df0fd230347cae5 100644 (file)
@@ -25,6 +25,6 @@ print_r($u);
 --EXPECT--
 Derived Object
 (
-    [id:protected] => 44
     [id:Base:private] => 64
+    [id:protected] => 44
 )
index ba721a3d981428c3cb5ba4d6337d5e4f475131f1..5fbcedd7ec2f0d55fd49d149729ea6ae1eb6ff59 100644 (file)
@@ -97,35 +97,35 @@ Sanity check: bool(true)
 
 Before serialization:
 object(B)#%d (6) {
-  ["BPriv":"B":private]=>
-  string(7) "B.BPriv"
-  ["BProt":protected]=>
-  string(7) "B.BProt"
-  ["BPub"]=>
-  string(6) "B.BPub"
   ["APriv":"A":private]=>
   string(7) "A.APriv"
   ["AProt":protected]=>
   string(7) "A.AProt"
   ["APub"]=>
   string(6) "A.APub"
-}
-Serialized form:
-string(184) "O:1:"B":6:{s:8:"\0B\0BPriv";s:7:"B.BPriv";s:8:"\0*\0BProt";s:7:"B.BProt";s:4:"BPub";s:6:"B.BPub";s:8:"\0A\0APriv";s:7:"A.APriv";s:8:"\0*\0AProt";s:7:"A.AProt";s:4:"APub";s:6:"A.APub";}"
-Unserialized:
-object(B)#%d (6) {
   ["BPriv":"B":private]=>
   string(7) "B.BPriv"
   ["BProt":protected]=>
   string(7) "B.BProt"
   ["BPub"]=>
   string(6) "B.BPub"
+}
+Serialized form:
+string(184) "O:1:"B":6:{s:8:"\0A\0APriv";s:7:"A.APriv";s:8:"\0*\0AProt";s:7:"A.AProt";s:4:"APub";s:6:"A.APub";s:8:"\0B\0BPriv";s:7:"B.BPriv";s:8:"\0*\0BProt";s:7:"B.BProt";s:4:"BPub";s:6:"B.BPub";}"
+Unserialized:
+object(B)#%d (6) {
   ["APriv":"A":private]=>
   string(7) "A.APriv"
   ["AProt":protected]=>
   string(7) "A.AProt"
   ["APub"]=>
   string(6) "A.APub"
+  ["BPriv":"B":private]=>
+  string(7) "B.BPriv"
+  ["BProt":protected]=>
+  string(7) "B.BProt"
+  ["BPub"]=>
+  string(6) "B.BPub"
 }
 Sanity check: bool(true)
 
@@ -135,51 +135,51 @@ Sanity check: bool(true)
 
 Before serialization:
 object(C)#%d (10) {
-  ["APriv":"C":private]=>
-  string(7) "C.APriv"
+  ["APriv":"A":private]=>
+  string(7) "A.APriv"
   ["AProt":protected]=>
   string(7) "C.AProt"
   ["APub"]=>
   string(6) "C.APub"
-  ["CPriv":"C":private]=>
-  string(7) "C.CPriv"
-  ["CProt":protected]=>
-  string(7) "C.BProt"
-  ["CPub"]=>
-  string(6) "C.CPub"
   ["BPriv":"B":private]=>
   string(7) "B.BPriv"
   ["BProt":protected]=>
   string(7) "B.BProt"
   ["BPub"]=>
   string(6) "B.BPub"
-  ["APriv":"A":private]=>
-  string(7) "A.APriv"
-}
-Serialized form:
-string(302) "O:1:"C":10:{s:8:"\0C\0APriv";s:7:"C.APriv";s:8:"\0*\0AProt";s:7:"C.AProt";s:4:"APub";s:6:"C.APub";s:8:"\0C\0CPriv";s:7:"C.CPriv";s:8:"\0*\0CProt";s:7:"C.BProt";s:4:"CPub";s:6:"C.CPub";s:8:"\0B\0BPriv";s:7:"B.BPriv";s:8:"\0*\0BProt";s:7:"B.BProt";s:4:"BPub";s:6:"B.BPub";s:8:"\0A\0APriv";s:7:"A.APriv";}"
-Unserialized:
-object(C)#%d (10) {
   ["APriv":"C":private]=>
   string(7) "C.APriv"
-  ["AProt":protected]=>
-  string(7) "C.AProt"
-  ["APub"]=>
-  string(6) "C.APub"
   ["CPriv":"C":private]=>
   string(7) "C.CPriv"
   ["CProt":protected]=>
   string(7) "C.BProt"
   ["CPub"]=>
   string(6) "C.CPub"
+}
+Serialized form:
+string(302) "O:1:"C":10:{s:8:"\0A\0APriv";s:7:"A.APriv";s:8:"\0*\0AProt";s:7:"C.AProt";s:4:"APub";s:6:"C.APub";s:8:"\0B\0BPriv";s:7:"B.BPriv";s:8:"\0*\0BProt";s:7:"B.BProt";s:4:"BPub";s:6:"B.BPub";s:8:"\0C\0APriv";s:7:"C.APriv";s:8:"\0C\0CPriv";s:7:"C.CPriv";s:8:"\0*\0CProt";s:7:"C.BProt";s:4:"CPub";s:6:"C.CPub";}"
+Unserialized:
+object(C)#%d (10) {
+  ["APriv":"A":private]=>
+  string(7) "A.APriv"
+  ["AProt":protected]=>
+  string(7) "C.AProt"
+  ["APub"]=>
+  string(6) "C.APub"
   ["BPriv":"B":private]=>
   string(7) "B.BPriv"
   ["BProt":protected]=>
   string(7) "B.BProt"
   ["BPub"]=>
   string(6) "B.BPub"
-  ["APriv":"A":private]=>
-  string(7) "A.APriv"
+  ["APriv":"C":private]=>
+  string(7) "C.APriv"
+  ["CPriv":"C":private]=>
+  string(7) "C.CPriv"
+  ["CProt":protected]=>
+  string(7) "C.BProt"
+  ["CPub"]=>
+  string(6) "C.CPub"
 }
 Sanity check: bool(true)
 Done
index f079f81153e78212fcd83cfee00b854dad2613c3..26ddfa2cb1202980caebd004255b7d23edf838fc 100644 (file)
@@ -28,15 +28,6 @@ array(1) {
   int(1)
 }
 object(myZip)#1 (%d) {
-  ["test":"myZip":private]=>
-  int(0)
-  ["testp"]=>
-  string(6) "foobar"
-  ["testarray":"myZip":private]=>
-  array(1) {
-    [0]=>
-    int(1)
-  }
   ["lastId"]=>
   int(-1)
   ["status"]=>
@@ -49,4 +40,13 @@ object(myZip)#1 (%d) {
   string(0) ""
   ["comment"]=>
   string(0) ""
+  ["test":"myZip":private]=>
+  int(0)
+  ["testp"]=>
+  string(6) "foobar"
+  ["testarray":"myZip":private]=>
+  array(1) {
+    [0]=>
+    int(1)
+  }
 }
index fa2a086b1975d942e8d346d4b61ceffc9e9ced05..25580b57f47b3ba0b14c0a4ab652f1ae6f542273 100644 (file)
@@ -14,15 +14,6 @@ array(1) {
   int(1)
 }
 object(myZip)#1 (%d) {
-  ["test":"myZip":private]=>
-  int(0)
-  ["testp"]=>
-  string(6) "foobar"
-  ["testarray":"myZip":private]=>
-  array(1) {
-    [0]=>
-    int(1)
-  }
   ["lastId"]=>
   int(-1)
   ["status"]=>
@@ -35,4 +26,13 @@ object(myZip)#1 (%d) {
   string(0) ""
   ["comment"]=>
   string(0) ""
+  ["test":"myZip":private]=>
+  int(0)
+  ["testp"]=>
+  string(6) "foobar"
+  ["testarray":"myZip":private]=>
+  array(1) {
+    [0]=>
+    int(1)
+  }
 }
index 30d4cc549a4217577fcae357cf6a7760456f5e10..83326ed5dc6395190f2a9e0775f7476acee8510a 100644 (file)
@@ -37,20 +37,20 @@ Object
 test Object
 (
     [p1] => test:1
+    [p2] => base:2
     [p3] => test:3
     [p4] => A
     [p5] => test:5
-    [p2] => base:2
     [p6:base:private] => base:6
 )
 Clown
 test Object
 (
     [p1] => test:1
+    [p2] => base:2
     [p3] => test:3
     [p4] => A
     [p5] => clone:5
-    [p2] => base:2
     [p6:base:private] => base:6
 )
 Done
index 610a00e70232c3425328358a19cf282256e7353d..80f80e220c0e9b42be8571121077eaf935847b0d 100644 (file)
@@ -40,13 +40,6 @@ echo "Done\n";
 --EXPECT--
 Original
 object(test)#1 (2) {
-  ["b"]=>
-  array(2) {
-    [0]=>
-    int(3)
-    [1]=>
-    int(4)
-  }
   ["a"]=>
   array(2) {
     [0]=>
@@ -54,9 +47,6 @@ object(test)#1 (2) {
     [1]=>
     int(2)
   }
-}
-Clone
-object(test)#2 (2) {
   ["b"]=>
   array(2) {
     [0]=>
@@ -64,6 +54,9 @@ object(test)#2 (2) {
     [1]=>
     int(4)
   }
+}
+Clone
+object(test)#2 (2) {
   ["a"]=>
   array(2) {
     [0]=>
@@ -71,12 +64,19 @@ object(test)#2 (2) {
     [1]=>
     int(2)
   }
+  ["b"]=>
+  array(2) {
+    [0]=>
+    int(3)
+    [1]=>
+    int(4)
+  }
 }
 Modify
 object(test)#2 (2) {
-  ["b"]=>
-  int(6)
   ["a"]=>
   int(5)
+  ["b"]=>
+  int(6)
 }
 Done
index c3df0747a4ac5c51fa95a16bbfc4db560594a72b..8cbac55dfaff16222b39a60674db5839c53386a0 100644 (file)
@@ -80,17 +80,17 @@ object(B)#%d (1) {
   }
 }
 object(C)#%d (3) {
-  ["a_c_parent"]=>
+  ["a_b"]=>
   array(1) {
     ["key"]=>
     string(5) "value"
   }
-  ["a_c_self"]=>
+  ["a_c_parent"]=>
   array(1) {
     ["key"]=>
     string(5) "value"
   }
-  ["a_b"]=>
+  ["a_c_self"]=>
   array(1) {
     ["key"]=>
     string(5) "value"
index bd1414c8b8813e5b53330f43b92974f6f5a69b7f..5dbb1747065b052139ad4e266dc14e3b5778d5ee 100644 (file)
@@ -67,31 +67,31 @@ base Object
 Testing class derived
 derived Object
 (
-    [other] => other
     [name] => init
+    [other] => other
 )
 base::__construct
 derived Object
 (
-    [other] => other
     [name] => base
+    [other] => other
 )
 derived::__construct
 derived Object
 (
-    [other] => other
     [name] => derived
+    [other] => other
 )
 base::__destruct
 derived Object
 (
-    [other] => other
     [name] => derived
+    [other] => other
 )
 derived::__destruct
 derived Object
 (
-    [other] => other
     [name] => derived
+    [other] => other
 )
 Done
index 6009c35ffc934b62dd9841e0974c0423c0b78b11..35465cc2acb91193d2fdbd374bd79b7793efaddc 100644 (file)
@@ -17,8 +17,8 @@ var_dump(new C);
 ?>
 --EXPECTF--
 object(C)#%d (2) {
-  ["c":"B":private]=>
-  NULL
   ["c":"A":private]=>
   NULL
+  ["c":"B":private]=>
+  NULL
 }
index 1b48722dbba742936733a7713ce6546ac628a563..19539cf37431c44ecd9f523037bd3cfbda302414 100644 (file)
@@ -57,45 +57,45 @@ base::__construct(begin)
 base::test
 derived Object
 (
-    [member] => derived::member (default)
     [member:base:private] => base::member
+    [member] => derived::member (default)
 )
 derived::test
 derived Object
 (
-    [member] => derived::member (default)
     [member:base:private] => base::member
+    [member] => derived::member (default)
 )
 base::__construct(end)
 base::test
 derived Object
 (
-    [member] => derived::member (default)
     [member:base:private] => base::member
+    [member] => derived::member (default)
 )
 base::test
 derived Object
 (
-    [member] => derived::member (default)
     [member:base:private] => base::member
+    [member] => derived::member (default)
 )
 derived::test
 derived Object
 (
-    [member] => derived::member (default)
     [member:base:private] => base::member
+    [member] => derived::member (default)
 )
 derived::__construct(end)
 base::test
 derived Object
 (
-    [member] => derived::member
     [member:base:private] => base::member
+    [member] => derived::member
 )
 derived::test
 derived Object
 (
-    [member] => derived::member
     [member:base:private] => base::member
+    [member] => derived::member
 )
 Done
index 46bd6f8a378ca5d04a357094d716734d3c9e9739..ed9ce5c94afcb9caa51175c698e48007d03f3450 100644 (file)
@@ -191,17 +191,13 @@ object(C)#%d (5) {
 
 --> Using instance of D:
 in D::doForEachOnThis
-string(10) "Original f"
-string(10) "Original g"
 string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 string(10) "Original d"
+string(10) "Original f"
+string(10) "Original g"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(9) "changed.f"
-  ["g":protected]=>
-  string(9) "changed.g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -212,6 +208,10 @@ object(D)#%d (7) {
   string(9) "changed.d"
   ["e":"C":private]=>
   string(10) "Original e"
+  ["f":"D":private]=>
+  string(9) "changed.f"
+  ["g":protected]=>
+  string(9) "changed.g"
 }
 
 --> Using instance of E:
@@ -220,8 +220,8 @@ string(12) "Overridden a"
 string(12) "Overridden b"
 string(12) "Overridden c"
 string(12) "Overridden d"
-string(12) "Overridden e"
 string(10) "Original g"
+string(12) "Overridden e"
 object(E)#%d (8) {
   ["a"]=>
   string(9) "changed.a"
@@ -231,14 +231,14 @@ object(E)#%d (8) {
   string(9) "changed.c"
   ["d":protected]=>
   string(9) "changed.d"
-  ["e":"E":private]=>
-  string(9) "changed.e"
+  ["e":"C":private]=>
+  string(10) "Original e"
   ["f":"D":private]=>
   string(10) "Original f"
   ["g":protected]=>
   string(9) "changed.g"
-  ["e":"C":private]=>
-  string(10) "Original e"
+  ["e":"E":private]=>
+  string(9) "changed.e"
 }
 
 
@@ -266,17 +266,13 @@ object(C)#%d (5) {
 
 --> Using instance of D:
 in C::doForEachC
-string(10) "Original g"
 string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 string(10) "Original d"
 string(10) "Original e"
+string(10) "Original g"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(10) "Original f"
-  ["g":protected]=>
-  string(9) "changed.g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -287,6 +283,10 @@ object(D)#%d (7) {
   string(9) "changed.d"
   ["e":"C":private]=>
   string(9) "changed.e"
+  ["f":"D":private]=>
+  string(10) "Original f"
+  ["g":protected]=>
+  string(9) "changed.g"
 }
 
 --> Using instance of E:
@@ -295,8 +295,8 @@ string(12) "Overridden a"
 string(12) "Overridden b"
 string(12) "Overridden c"
 string(12) "Overridden d"
-string(10) "Original g"
 string(10) "Original e"
+string(10) "Original g"
 object(E)#%d (8) {
   ["a"]=>
   string(9) "changed.a"
@@ -306,14 +306,14 @@ object(E)#%d (8) {
   string(9) "changed.c"
   ["d":protected]=>
   string(9) "changed.d"
-  ["e":"E":private]=>
-  string(12) "Overridden e"
+  ["e":"C":private]=>
+  string(9) "changed.e"
   ["f":"D":private]=>
   string(10) "Original f"
   ["g":protected]=>
   string(9) "changed.g"
-  ["e":"C":private]=>
-  string(9) "changed.e"
+  ["e":"E":private]=>
+  string(12) "Overridden e"
 }
 
 
@@ -375,17 +375,13 @@ object(C)#%d (5) {
 
 --> Using instance of D:
 in C::doForEach
-string(10) "Original g"
 string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 string(10) "Original d"
 string(10) "Original e"
+string(10) "Original g"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(10) "Original f"
-  ["g":protected]=>
-  string(9) "changed.g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -396,19 +392,19 @@ object(D)#%d (7) {
   string(9) "changed.d"
   ["e":"C":private]=>
   string(9) "changed.e"
+  ["f":"D":private]=>
+  string(10) "Original f"
+  ["g":protected]=>
+  string(9) "changed.g"
 }
 in D::doForEach
-string(10) "Original f"
-string(10) "Original g"
 string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 string(10) "Original d"
+string(10) "Original f"
+string(10) "Original g"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(9) "changed.f"
-  ["g":protected]=>
-  string(9) "changed.g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -419,18 +415,18 @@ object(D)#%d (7) {
   string(9) "changed.d"
   ["e":"C":private]=>
   string(10) "Original e"
+  ["f":"D":private]=>
+  string(9) "changed.f"
+  ["g":protected]=>
+  string(9) "changed.g"
 }
 in E::doForEach
-string(10) "Original g"
 string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 string(10) "Original d"
+string(10) "Original g"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(10) "Original f"
-  ["g":protected]=>
-  string(9) "changed.g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -441,6 +437,10 @@ object(D)#%d (7) {
   string(9) "changed.d"
   ["e":"C":private]=>
   string(10) "Original e"
+  ["f":"D":private]=>
+  string(10) "Original f"
+  ["g":protected]=>
+  string(9) "changed.g"
 }
 
 --> Using instance of E:
@@ -449,8 +449,8 @@ string(12) "Overridden a"
 string(12) "Overridden b"
 string(12) "Overridden c"
 string(12) "Overridden d"
-string(10) "Original g"
 string(10) "Original e"
+string(10) "Original g"
 object(E)#%d (8) {
   ["a"]=>
   string(9) "changed.a"
@@ -460,14 +460,14 @@ object(E)#%d (8) {
   string(9) "changed.c"
   ["d":protected]=>
   string(9) "changed.d"
-  ["e":"E":private]=>
-  string(12) "Overridden e"
+  ["e":"C":private]=>
+  string(9) "changed.e"
   ["f":"D":private]=>
   string(10) "Original f"
   ["g":protected]=>
   string(9) "changed.g"
-  ["e":"C":private]=>
-  string(9) "changed.e"
+  ["e":"E":private]=>
+  string(12) "Overridden e"
 }
 in D::doForEach
 string(12) "Overridden a"
@@ -485,22 +485,22 @@ object(E)#%d (8) {
   string(9) "changed.c"
   ["d":protected]=>
   string(9) "changed.d"
-  ["e":"E":private]=>
-  string(12) "Overridden e"
+  ["e":"C":private]=>
+  string(10) "Original e"
   ["f":"D":private]=>
   string(9) "changed.f"
   ["g":protected]=>
   string(9) "changed.g"
-  ["e":"C":private]=>
-  string(10) "Original e"
+  ["e":"E":private]=>
+  string(12) "Overridden e"
 }
 in E::doForEach
 string(12) "Overridden a"
 string(12) "Overridden b"
 string(12) "Overridden c"
 string(12) "Overridden d"
-string(12) "Overridden e"
 string(10) "Original g"
+string(12) "Overridden e"
 object(E)#%d (8) {
   ["a"]=>
   string(9) "changed.a"
@@ -510,14 +510,14 @@ object(E)#%d (8) {
   string(9) "changed.c"
   ["d":protected]=>
   string(9) "changed.d"
-  ["e":"E":private]=>
-  string(9) "changed.e"
+  ["e":"C":private]=>
+  string(10) "Original e"
   ["f":"D":private]=>
   string(10) "Original f"
   ["g":protected]=>
   string(9) "changed.g"
-  ["e":"C":private]=>
-  string(10) "Original e"
+  ["e":"E":private]=>
+  string(9) "changed.e"
 }
 
 
@@ -545,10 +545,6 @@ string(10) "Original a"
 string(10) "Original b"
 string(10) "Original c"
 object(D)#%d (7) {
-  ["f":"D":private]=>
-  string(10) "Original f"
-  ["g":protected]=>
-  string(10) "Original g"
   ["a"]=>
   string(9) "changed.a"
   ["b"]=>
@@ -559,6 +555,10 @@ object(D)#%d (7) {
   string(10) "Original d"
   ["e":"C":private]=>
   string(10) "Original e"
+  ["f":"D":private]=>
+  string(10) "Original f"
+  ["g":protected]=>
+  string(10) "Original g"
 }
 
 --> Using instance of E:
@@ -574,12 +574,12 @@ object(E)#%d (8) {
   &string(9) "changed.c"
   ["d":protected]=>
   string(12) "Overridden d"
-  ["e":"E":private]=>
-  string(12) "Overridden e"
+  ["e":"C":private]=>
+  string(10) "Original e"
   ["f":"D":private]=>
   string(10) "Original f"
   ["g":protected]=>
   string(10) "Original g"
-  ["e":"C":private]=>
-  string(10) "Original e"
+  ["e":"E":private]=>
+  string(12) "Overridden e"
 }