summaryrefslogtreecommitdiff
path: root/tests/classes/static_properties_004.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/classes/static_properties_004.phpt')
-rw-r--r--tests/classes/static_properties_004.phpt37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/classes/static_properties_004.phpt b/tests/classes/static_properties_004.phpt
new file mode 100644
index 0000000..ce1d19d
--- /dev/null
+++ b/tests/classes/static_properties_004.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Inherited static properties can be separated from their reference set.
+--FILE--
+<?php
+class C { public static $p = 'original'; }
+class D extends C { }
+class E extends D { }
+
+echo "\nInherited static properties refer to the same value accross classes:\n";
+var_dump(C::$p, D::$p, E::$p);
+
+echo "\nChanging one changes all the others:\n";
+D::$p = 'changed.all';
+var_dump(C::$p, D::$p, E::$p);
+
+echo "\nBut because this is implemented using PHP references, the reference set can easily be split:\n";
+$ref = 'changed.one';
+D::$p =& $ref;
+var_dump(C::$p, D::$p, E::$p);
+?>
+==Done==
+--EXPECTF--
+Inherited static properties refer to the same value accross classes:
+%unicode|string%(8) "original"
+%unicode|string%(8) "original"
+%unicode|string%(8) "original"
+
+Changing one changes all the others:
+%unicode|string%(11) "changed.all"
+%unicode|string%(11) "changed.all"
+%unicode|string%(11) "changed.all"
+
+But because this is implemented using PHP references, the reference set can easily be split:
+%unicode|string%(11) "changed.all"
+%unicode|string%(11) "changed.one"
+%unicode|string%(11) "changed.all"
+==Done== \ No newline at end of file