on Linux). (Patch: shulmanb at il dot ibm dot com, Jani)
- Fixed bug #35143 (gettimeofday() ignores current time zone). (Derick)
- Fixed bug #35046 (phpinfo() uses improper css enclosure). (Ilia)
+- Fixed bug #33732 (Wrong behavior of constants in class and interface
+ extending). (Dmitry)
- Fixed bug #33153 (crash in mssql_next result). (Frank)
- Fixed bug #33963 (mssql_bind() fails on input parameters). (Frank)
- Fixed bug #33201 (Crash when fetching some data types). (Frank)
--- /dev/null
+--TEST--
+Bug #33732 (Wrong behavior of constants in class and interface extending)
+--FILE--
+<?php
+interface iA {
+ const cA = "const of iA\n";
+}
+
+class A implements iA {
+}
+
+class B extends A implements iA {
+}
+
+echo iA::cA;
+echo A::cA;
+echo B::cA;
+
+
+interface iA2 {
+ const cA = "const of iA2\n";
+}
+
+interface iB2 extends iA2 {
+}
+
+class A2 implements iA2 {
+}
+
+class B2 extends A2 implements iB2 {
+}
+
+echo iA2::cA;
+echo A2::cA;
+echo iB2::cA;
+echo B2::cA;
+?>
+--EXPECT--
+const of iA
+const of iA
+const of iA
+const of iA2
+const of iA2
+const of iA2
+const of iA2
}
-static zend_bool do_inherit_constant_check(HashTable *child_constants_table, zval *parent_constant, zend_hash_key *hash_key, zend_class_entry *iface)
+static zend_bool do_inherit_constant_check(HashTable *child_constants_table, zval **parent_constant, zend_hash_key *hash_key, zend_class_entry *iface)
{
- if (zend_hash_quick_exists(child_constants_table, hash_key->arKey, hash_key->nKeyLength, hash_key->h)) {
- zend_error(E_COMPILE_ERROR, "Cannot inherit previously-inherited constant %s from interface %s", hash_key->arKey, iface->name);
+ zval **old_constant;
+
+ if (zend_hash_quick_find(child_constants_table, hash_key->arKey, hash_key->nKeyLength, hash_key->h, (void**)&old_constant) == SUCCESS) {
+ if (*old_constant != *parent_constant) {
+ zend_error(E_COMPILE_ERROR, "Cannot inherit previously-inherited constant %s from interface %s", hash_key->arKey, iface->name);
+ }
return 0;
}
return 1;