1--TEST--
2Unsetting and recreating private properties.
3--FILE--
4<?php
5class C {
6	private $p = 'test';
7	function unsetPrivate() {
8		unset($this->p);
9	}
10	function setPrivate() {
11		$this->p = 'changed';
12	}
13}
14
15class D extends C {
16	function setP() {
17		$this->p = 'changed in D';
18	}
19}
20
21echo "Unset and recreate a superclass's private property:\n";
22$d = new D;
23$d->unsetPrivate();
24$d->setPrivate();
25var_dump($d);
26
27echo "\nUnset superclass's private property, and recreate it as public in subclass:\n";
28$d = new D;
29$d->unsetPrivate();
30$d->setP();
31var_dump($d);
32
33echo "\nUnset superclass's private property, and recreate it as public at global scope:\n";
34$d = new D;
35$d->unsetPrivate();
36$d->p = 'this will create a public property';
37var_dump($d);
38
39
40echo "\n\nUnset and recreate a private property:\n";
41$c = new C;
42$c->unsetPrivate();
43$c->setPrivate();
44var_dump($c);
45
46echo "\nUnset a private property, and attempt to recreate at global scope (expecting failure):\n";
47$c = new C;
48$c->unsetPrivate();
49$c->p = 'this will fail';
50var_dump($c);
51?>
52==Done==
53--EXPECTF--
54Unset and recreate a superclass's private property:
55object(D)#%d (1) {
56  [%u|b%"p":%u|b%"C":private]=>
57  %unicode|string%(7) "changed"
58}
59
60Unset superclass's private property, and recreate it as public in subclass:
61object(D)#%d (1) {
62  [%u|b%"p"]=>
63  %unicode|string%(12) "changed in D"
64}
65
66Unset superclass's private property, and recreate it as public at global scope:
67object(D)#%d (1) {
68  [%u|b%"p"]=>
69  %unicode|string%(34) "this will create a public property"
70}
71
72
73Unset and recreate a private property:
74object(C)#%d (1) {
75  [%u|b%"p":%u|b%"C":private]=>
76  %unicode|string%(7) "changed"
77}
78
79Unset a private property, and attempt to recreate at global scope (expecting failure):
80
81Fatal error: Uncaught Error: Cannot access private property C::$p in %s:46
82Stack trace:
83#0 {main}
84  thrown in %s on line 46
85