--- /dev/null
+--TEST--
+Bug #28442 (Changing a static variables in a class changes it across sub/super classes.)
+--FILE--
+<?php
+
+class ClassA
+{
+ static $prop;
+}
+
+class ClassB extends ClassA
+{
+ static $prop;
+}
+
+class ClassC extends ClassB
+{
+}
+
+echo "===INIT===\n";
+ClassA::$prop = 'A';
+ClassB::$prop = 'B';
+ClassC::$prop = 'C';
+var_dump(ClassA::$prop);
+var_dump(ClassB::$prop);
+var_dump(ClassC::$prop);
+
+echo "===SetA===\n";
+ClassA::$prop = 'A2';
+var_dump(ClassA::$prop);
+var_dump(ClassB::$prop);
+var_dump(ClassC::$prop);
+
+echo "===SetB===\n";
+ClassB::$prop = 'B2';
+var_dump(ClassA::$prop);
+var_dump(ClassB::$prop);
+var_dump(ClassC::$prop);
+
+echo "===SetC===\n";
+ClassC::$prop = 'C2';
+var_dump(ClassA::$prop);
+var_dump(ClassB::$prop);
+var_dump(ClassC::$prop);
+
+?>
+===DONE===
+--EXPECTF--
+===INIT===
+string(1) "A"
+string(1) "C"
+string(1) "C"
+===SetA===
+string(2) "A2"
+string(1) "C"
+string(1) "C"
+===SetB===
+string(2) "A2"
+string(2) "B2"
+string(2) "B2"
+===SetC===
+string(2) "A2"
+string(2) "C2"
+string(2) "C2"
+===DONE===
zend_hash_del(&ce->default_properties, prot_name, prot_name_length+1);
}
pefree(prot_name, ce->type & ZEND_INTERNAL_CLASS);
- } else if (!(child_info->flags & ZEND_ACC_PRIVATE) && (child_info->flags & ZEND_ACC_STATIC)) {
- char *prop_name, *tmp;
-
- zend_unmangle_property_name(child_info->name, &tmp, &prop_name);
- zend_error(E_COMPILE_ERROR, "Cannot redeclare property static %s %s::$%s in class %s",
- zend_visibility_string(child_info->flags), parent_ce->name, prop_name, ce->name);
}
return 0; /* Don't copy from parent */
} else {