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
67
68Warning: Undefined array key "prop" in %s on line %d
69NULL
70NULL
71  - After:
72object(ArrayObject)#2 (1) {
73  ["storage":"ArrayObject":private]=>
74  object(C)#1 (0) {
75  }
76}
77object(C)#1 (0) {
78}
79
80--> Access prop on instance of MyArrayObject with ArrayObject::ARRAY_AS_PROPS:
81  - Iteration:
82      prop=>C::prop.orig
83  - Read:
84string(24) "MyArrayObject::prop.orig"
85string(12) "C::prop.orig"
86  - Write:
87string(8) "changed1"
88string(8) "changed2"
89  - Isset:
90bool(true)
91bool(true)
92  - Unset:
93
94Warning: Undefined array key "prop" in %s on line %d
95
96Warning: Undefined array key "prop" in %s on line %d
97NULL
98NULL
99  - After:
100object(MyArrayObject)#3 (1) {
101  ["storage":"ArrayObject":private]=>
102  object(C)#4 (0) {
103  }
104}
105object(C)#4 (0) {
106}
107