1--TEST--
2Unsetting and recreating protected properties.
3--FILE--
4<?php
5class C {
6    protected $p = 'test';
7    function unsetProtected() {
8        unset($this->p);
9    }
10    function setProtected() {
11        $this->p = 'changed';
12    }
13}
14
15class D extends C {
16    function setP() {
17        $this->p = 'changed in D';
18    }
19}
20
21$d = new D;
22echo "Unset and recreate a protected property from property's declaring class scope:\n";
23$d->unsetProtected();
24$d->setProtected();
25var_dump($d);
26
27echo "\nUnset and recreate a protected property from subclass:\n";
28$d = new D;
29$d->unsetProtected();
30$d->setP();
31var_dump($d);
32
33echo "\nUnset a protected property, and attempt to recreate it outside of scope (expected failure):\n";
34$d->unsetProtected();
35$d->p = 'this will fail';
36var_dump($d);
37?>
38--EXPECTF--
39Unset and recreate a protected property from property's declaring class scope:
40object(D)#%d (1) {
41  ["p":protected]=>
42  string(7) "changed"
43}
44
45Unset and recreate a protected property from subclass:
46object(D)#%d (1) {
47  ["p":protected]=>
48  string(12) "changed in D"
49}
50
51Unset a protected property, and attempt to recreate it outside of scope (expected failure):
52
53Fatal error: Uncaught Error: Cannot access protected property %s::$p in %s:32
54Stack trace:
55#0 {main}
56  thrown in %s on line 32
57