1--TEST-- 2SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. Currently fails on php.net due to bug 45622. 3--FILE-- 4<?php 5class C { 6 public $prop = 'C::prop.orig'; 7} 8 9class MyArrayObject extends ArrayObject { 10 public $prop = 'MyArrayObject::prop.orig'; 11} 12 13echo "\n--> Access prop on instance of ArrayObject with ArrayObject::ARRAY_AS_PROPS:\n"; 14$c = new C; 15$ao = new ArrayObject($c, ArrayObject::ARRAY_AS_PROPS); 16testAccess($c, $ao); 17 18echo "\n--> Access prop on instance of MyArrayObject with ArrayObject::ARRAY_AS_PROPS:\n"; 19$c = new C; 20$ao = new MyArrayObject($c, ArrayObject::ARRAY_AS_PROPS); 21testAccess($c, $ao); 22 23function testAccess($c, $ao) { 24 echo " - Iteration:\n"; 25 foreach ($ao as $key=>$value) { 26 echo " $key=>$value\n"; 27 } 28 29 echo " - Read:\n"; 30 @var_dump($ao->prop, $ao['prop']); 31 32 echo " - Write:\n"; 33 $ao->prop = 'changed1'; 34 $ao['prop'] = 'changed2'; 35 var_dump($ao->prop, $ao['prop']); 36 37 echo " - Isset:\n"; 38 var_dump(isset($ao->prop), isset($ao['prop'])); 39 40 echo " - Unset:\n"; 41 unset($ao->prop); 42 unset($ao['prop']); 43 var_dump($ao->prop, $ao['prop']); 44 45 echo " - After:\n"; 46 var_dump($ao, $c); 47} 48?> 49--EXPECTF-- 50--> Access prop on instance of ArrayObject with ArrayObject::ARRAY_AS_PROPS: 51 - Iteration: 52 prop=>C::prop.orig 53 - Read: 54string(12) "C::prop.orig" 55string(12) "C::prop.orig" 56 - Write: 57string(8) "changed2" 58string(8) "changed2" 59 - Isset: 60bool(true) 61bool(true) 62 - Unset: 63 64Warning: Undefined array key "prop" in %s on line %d 65 66Warning: Undefined array key "prop" in %s on line %d 67NULL 68NULL 69 - After: 70object(ArrayObject)#2 (1) { 71 ["storage":"ArrayObject":private]=> 72 object(C)#1 (0) { 73 } 74} 75object(C)#1 (0) { 76} 77 78--> Access prop on instance of MyArrayObject with ArrayObject::ARRAY_AS_PROPS: 79 - Iteration: 80 prop=>C::prop.orig 81 - Read: 82string(24) "MyArrayObject::prop.orig" 83string(12) "C::prop.orig" 84 - Write: 85string(8) "changed1" 86string(8) "changed2" 87 - Isset: 88bool(true) 89bool(true) 90 - Unset: 91 92Warning: Undefined array key "prop" in %s on line %d 93 94Warning: Undefined array key "prop" in %s on line %d 95NULL 96NULL 97 - After: 98object(MyArrayObject)#3 (1) { 99 ["storage":"ArrayObject":private]=> 100 object(C)#4 (0) { 101 } 102} 103object(C)#4 (0) { 104} 105