1
+ --TEST--
2
+ Un-setting instance properties causes magic methods to be called when trying to access them from outside the magic
3
+ methods themselves.
4
+ --FILE--
5
+ <?php
6
+
7
+ class Test
8
+ {
9
+ public $ publicProperty = 'publicProperty set ' ;
10
+
11
+ protected $ protectedProperty = 'protectedProperty set ' ;
12
+
13
+ private $ privateProperty = 'privateProperty set ' ;
14
+
15
+ public function __get ($ name )
16
+ {
17
+ return '__get " ' . $ name . '" ' ;
18
+ }
19
+
20
+ public function __set ($ name , $ value )
21
+ {
22
+ $ this ->$ name = $ value ;
23
+ echo '__set " ' . $ name . '" to " ' . $ value . '" ' ;
24
+ }
25
+
26
+ public function __isset ($ name )
27
+ {
28
+ echo '__isset " ' . $ name . '" ' ;
29
+ return isset ($ this ->$ name );
30
+ }
31
+
32
+ public function getPublicProperty ()
33
+ {
34
+ return $ this ->publicProperty ;
35
+ }
36
+
37
+ public function setPublicProperty ($ publicProperty )
38
+ {
39
+ $ this ->publicProperty = $ publicProperty ;
40
+ }
41
+
42
+ public function unsetProtectedProperty ()
43
+ {
44
+ unset($ this ->protectedProperty );
45
+ }
46
+
47
+ public function getProtectedProperty ()
48
+ {
49
+ return $ this ->protectedProperty ;
50
+ }
51
+
52
+ public function setProtectedProperty ($ protectedProperty )
53
+ {
54
+ $ this ->protectedProperty = $ protectedProperty ;
55
+ }
56
+
57
+ public function unsetPrivateProperty ()
58
+ {
59
+ unset($ this ->privateProperty );
60
+ }
61
+
62
+ public function getPrivateProperty ()
63
+ {
64
+ return $ this ->privateProperty ;
65
+ }
66
+
67
+ public function setPrivateProperty ($ privateProperty )
68
+ {
69
+ $ this ->privateProperty = $ privateProperty ;
70
+ }
71
+ }
72
+
73
+ // verifying public property
74
+ $ o = new Test ;
75
+ echo $ o ->publicProperty ;
76
+ echo "\n" ;
77
+ var_export (isset ($ o ->publicProperty ));
78
+ echo "\n" ;
79
+ unset($ o ->publicProperty );
80
+ isset ($ o ->publicProperty );
81
+ echo "\n" ;
82
+ echo $ o ->publicProperty ;
83
+ echo "\n" ;
84
+ echo $ o ->getPublicProperty ();
85
+ echo "\n" ;
86
+ echo $ o ->setPublicProperty ('new publicProperty value via setter ' );
87
+ echo "\n" ;
88
+ echo $ o ->publicProperty ;
89
+ echo "\n" ;
90
+ unset($ o ->publicProperty );
91
+ $ o ->publicProperty = 'new publicProperty value via public access ' ;
92
+ echo "\n" ;
93
+ var_export (isset ($ o ->publicProperty ));
94
+ echo "\n" ;
95
+ echo $ o ->publicProperty ;
96
+ echo "\n\n" ;
97
+
98
+ // verifying protected property
99
+ echo $ o ->getProtectedProperty ();
100
+ echo "\n" ;
101
+ $ o ->unsetProtectedProperty ();
102
+ var_export (isset ($ o ->protectedProperty ));
103
+ echo "\n" ;
104
+ echo $ o ->getProtectedProperty ();
105
+ echo "\n" ;
106
+ echo $ o ->setProtectedProperty ('new protectedProperty value via setter ' );
107
+ echo "\n" ;
108
+ var_export (isset ($ o ->protectedProperty ));
109
+ echo "\n" ;
110
+ echo $ o ->getProtectedProperty ();
111
+ echo "\n\n" ;
112
+
113
+ // verifying private property
114
+ echo $ o ->getPrivateProperty ();
115
+ echo "\n" ;
116
+ $ o ->unsetPrivateProperty ();
117
+ var_export (isset ($ o ->privateProperty ));
118
+ echo "\n" ;
119
+ echo $ o ->getPrivateProperty ();
120
+ echo "\n" ;
121
+ echo $ o ->setPrivateProperty ('new privateProperty value via setter ' );
122
+ echo "\n" ;
123
+ var_export (isset ($ o ->privateProperty ));
124
+ echo "\n" ;
125
+ echo $ o ->getPrivateProperty ();
126
+ echo "\n\n" ;
127
+
128
+ ?>
129
+
130
+ --EXPECTF--
131
+ publicProperty set
132
+ true
133
+ __isset "publicProperty"
134
+ __get "publicProperty"
135
+ __get "publicProperty"
136
+ __set "publicProperty" to "new publicProperty value via setter"
137
+ new publicProperty value via setter
138
+ __set "publicProperty" to "new publicProperty value via public access"
139
+ true
140
+ new publicProperty value via public access
141
+
142
+ protectedProperty set
143
+ __isset "protectedProperty"__isset "protectedProperty"false
144
+ __get "protectedProperty"
145
+ __set "protectedProperty" to "new protectedProperty value via setter"
146
+ __isset "protectedProperty"true
147
+ new protectedProperty value via setter
148
+
149
+ privateProperty set
150
+ __isset "privateProperty"__isset "privateProperty"false
151
+ __get "privateProperty"
152
+ __set "privateProperty" to "new privateProperty value via setter"
153
+ __isset "privateProperty"true
154
+ new privateProperty value via setter
0 commit comments