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"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"false
151: __get "privateProperty"
152: __set "privateProperty" to "new privateProperty value via setter"
153: __isset "privateProperty"true
154: new privateProperty value via setter
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>