1--TEST--
2Test ReflectionProperty::setAccessible().
3--FILE--
4<?php
5class A {
6    protected $protected = 'a';
7    protected static $protectedStatic = 'b';
8    private $private = 'c';
9    private static $privateStatic = 'd';
10}
11
12class B extends A {}
13
14$a               = new A;
15$protected       = new ReflectionProperty($a, 'protected');
16$protectedStatic = new ReflectionProperty('A', 'protectedStatic');
17$private         = new ReflectionProperty($a, 'private');
18$privateStatic   = new ReflectionProperty('A', 'privateStatic');
19
20try {
21    var_dump($protected->getValue($a));
22}
23
24catch (ReflectionException $e) {
25    var_dump($e->getMessage());
26}
27
28try {
29    var_dump($protectedStatic->getValue());
30}
31
32catch (ReflectionException $e) {
33    var_dump($e->getMessage());
34}
35
36try {
37    var_dump($private->getValue($a));
38}
39
40catch (ReflectionException $e) {
41    var_dump($e->getMessage());
42}
43
44try {
45    var_dump($privateStatic->getValue());
46}
47
48catch (ReflectionException $e) {
49    var_dump($e->getMessage());
50}
51
52$protected->setAccessible(TRUE);
53$protectedStatic->setAccessible(TRUE);
54$private->setAccessible(TRUE);
55$privateStatic->setAccessible(TRUE);
56
57var_dump($protected->getValue($a));
58var_dump($protectedStatic->getValue());
59var_dump($private->getValue($a));
60var_dump($privateStatic->getValue());
61
62$protected->setValue($a, 'e');
63$protectedStatic->setValue('f');
64$private->setValue($a, 'g');
65$privateStatic->setValue('h');
66
67var_dump($protected->getValue($a));
68var_dump($protectedStatic->getValue());
69var_dump($private->getValue($a));
70var_dump($privateStatic->getValue());
71
72$a               = new A;
73$b               = new B;
74$protected       = new ReflectionProperty($b, 'protected');
75$protectedStatic = new ReflectionProperty('B', 'protectedStatic');
76$private         = new ReflectionProperty($a, 'private');
77
78try {
79    var_dump($protected->getValue($b));
80}
81
82catch (ReflectionException $e) {
83    var_dump($e->getMessage());
84}
85
86try {
87    var_dump($protectedStatic->getValue());
88}
89
90catch (ReflectionException $e) {
91    var_dump($e->getMessage());
92}
93
94try {
95    var_dump($private->getValue($b));
96}
97
98catch (ReflectionException $e) {
99    var_dump($e->getMessage());
100}
101
102$protected->setAccessible(TRUE);
103$protectedStatic->setAccessible(TRUE);
104$private->setAccessible(TRUE);
105
106var_dump($protected->getValue($b));
107var_dump($protectedStatic->getValue());
108var_dump($private->getValue($b));
109
110$protected->setValue($b, 'e');
111$protectedStatic->setValue('f');
112$private->setValue($b, 'g');
113
114var_dump($protected->getValue($b));
115var_dump($protectedStatic->getValue());
116var_dump($private->getValue($b));
117?>
118--EXPECT--
119string(47) "Cannot access non-public property A::$protected"
120string(53) "Cannot access non-public property A::$protectedStatic"
121string(45) "Cannot access non-public property A::$private"
122string(51) "Cannot access non-public property A::$privateStatic"
123string(1) "a"
124string(1) "b"
125string(1) "c"
126string(1) "d"
127string(1) "e"
128string(1) "f"
129string(1) "g"
130string(1) "h"
131string(47) "Cannot access non-public property B::$protected"
132string(53) "Cannot access non-public property B::$protectedStatic"
133string(45) "Cannot access non-public property A::$private"
134string(1) "a"
135string(1) "f"
136string(1) "c"
137string(1) "e"
138string(1) "f"
139string(1) "g"
140