Might need to be documented -------- Original Message -------- Subject: cvs: php-src /ext/reflection/tests static_properties_002.phpt /tests/classes property_override_protectedStatic_publicStatic.phpt ZendEngine2 zend_compile.c ZendEngine2/tests errmsg_024.phpt lsb_019.phpt lsb_020.phpt Date: Mon, 03 Mar 2008 14:24:11 -0000 From: [EMAIL PROTECTED] ("Robin Fernandes") To: [EMAIL PROTECTED] Newsgroups: php.cvs Followup-To: php.internals
robinf Mon Mar 3 14:24:11 2008 UTC Added files: /ZendEngine2/tests lsb_020.phpt lsb_019.phpt Modified files: /ZendEngine2/tests errmsg_024.phpt /ZendEngine2 zend_compile.c /php-src/ext/reflection/tests static_properties_002.phpt /php-src/tests/classes property_override_protectedStatic_publicStatic.phpt Log: Remove inconsistent behaviour when a protected static prop is overridden by public static prop (details: http://turl.ca/phhhf ). http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/errmsg_024.phpt?r1=1.1&r2=1.2&diff_format=u Index: ZendEngine2/tests/errmsg_024.phpt diff -u ZendEngine2/tests/errmsg_024.phpt:1.1 ZendEngine2/tests/errmsg_024.phpt:1.2 --- ZendEngine2/tests/errmsg_024.phpt:1.1 Fri Feb 2 12:53:54 2007 +++ ZendEngine2/tests/errmsg_024.phpt Mon Mar 3 14:24:11 2008 @@ -1,5 +1,5 @@ --TEST-- -errmsg: cannot change initial value of property +No more errmsg: can now change initial value of property --FILE-- <?php @@ -14,4 +14,4 @@ echo "Done\n"; ?> --EXPECTF-- -Fatal error: Cannot change initial value of property static protected test1::$var in class test in %s on line %d +Done http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.805&r2=1.806&diff_format=u Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.805 ZendEngine2/zend_compile.c:1.806 --- ZendEngine2/zend_compile.c:1.805 Sat Mar 1 13:53:10 2008 +++ ZendEngine2/zend_compile.c Mon Mar 3 14:24:11 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.805 2008/03/01 13:53:10 johannes Exp $ */ +/* $Id: zend_compile.c,v 1.806 2008/03/03 14:24:11 robinf Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -2696,18 +2696,6 @@ ht = &parent_ce->default_static_members; } if (zend_u_hash_find(ht, utype, prot_name, prot_name_length+1, (void**)&prop) == SUCCESS) { - zval **new_prop; - if (zend_u_hash_find(&ce->default_static_members, utype, child_info->name, child_info->name_length+1, (void**)&new_prop) == SUCCESS) { - if (Z_TYPE_PP(new_prop) != IS_NULL && Z_TYPE_PP(prop) != IS_NULL) { - zstr prop_name, tmp; - - zend_u_unmangle_property_name(utype, child_info->name, child_info->name_length, &tmp, &prop_name); - zend_error(E_COMPILE_ERROR, "Cannot change initial value of property static protected %v::$%v in class %v", - parent_ce->name, prop_name, ce->name); - } - } - Z_ADDREF_PP(prop); - zend_u_hash_update(&ce->default_static_members, utype, child_info->name, child_info->name_length+1, (void**)prop, sizeof(zval*), NULL); zend_u_hash_del(&ce->default_static_members, utype, prot_name, prot_name_length+1); } } else { @@ -5674,3 +5662,4 @@ * indent-tabs-mode: t * End: */ + http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/tests/static_properties_002.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/reflection/tests/static_properties_002.phpt diff -u php-src/ext/reflection/tests/static_properties_002.phpt:1.3 php-src/ext/reflection/tests/static_properties_002.phpt:1.4 --- php-src/ext/reflection/tests/static_properties_002.phpt:1.3 Sun Mar 12 12:11:22 2006 +++ php-src/ext/reflection/tests/static_properties_002.phpt Mon Mar 3 14:24:11 2008 @@ -19,7 +19,7 @@ } class derived extends base { - static public $prop; + static public $prop = 2; static function show() { echo __METHOD__ . '(' . self::$prop . ")\n"; @@ -54,9 +54,9 @@ derived::show(2) base::inc() base::show(3) -derived::show(3) +derived::show(2) derived::inc() -base::show(4) -derived::show(4) +base::show(3) +derived::show(3) Number of properties: 1 -Done +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt?r1=1.2&r2=1.3&diff_format=u Index: php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt diff -u php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt:1.2 php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt:1.3 --- php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt:1.2 Wed Jan 30 14:29:18 2008 +++ php-src/tests/classes/property_override_protectedStatic_publicStatic.phpt Mon Mar 3 14:24:11 2008 @@ -27,5 +27,7 @@ B::showB(); ?> --EXPECTF-- +A::p (static) +A::p (static) +B::p (static) -Fatal error: Cannot change initial value of property static protected A::$p in class B in %s on line 18 http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/lsb_020.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/lsb_020.phpt +++ ZendEngine2/tests/lsb_020.phpt --TEST-- Test LSB of properties and methods declared as public and overridden as public. --FILE-- <?php class TestClass { public static $staticVar; public static function staticFunction() { return 'TestClassFunction'; } public static function testStaticVar() { TestClass::$staticVar = 'TestClassStatic'; ChildClass1::$staticVar = 'ChildClassStatic'; return static::$staticVar; } public static function testStaticFunction() { return static::staticFunction(); } } class ChildClass1 extends TestClass { public static $staticVar; public static function staticFunction() { return 'ChildClassFunction'; } } class ChildClass2 extends TestClass {} echo TestClass::testStaticVar() . "\n"; echo TestClass::testStaticFunction() . "\n"; echo ChildClass1::testStaticVar() . "\n"; echo ChildClass1::testStaticFunction() . "\n"; echo ChildClass2::testStaticVar() . "\n"; echo ChildClass2::testStaticFunction() . "\n"; ?> --EXPECTF-- TestClassStatic TestClassFunction ChildClassStatic ChildClassFunction TestClassStatic TestClassFunction http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/lsb_019.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/lsb_019.phpt +++ ZendEngine2/tests/lsb_019.phpt --TEST-- Test LSB of properties and methods declared as protected and overridden as public. --FILE-- <?php class TestClass { protected static $staticVar; protected static function staticFunction() { return 'TestClassFunction'; } public static function testStaticVar() { TestClass::$staticVar = 'TestClassStatic'; ChildClass1::$staticVar = 'ChildClassStatic'; return static::$staticVar; } public static function testStaticFunction() { return static::staticFunction(); } } class ChildClass1 extends TestClass { public static $staticVar; public static function staticFunction() { return 'ChildClassFunction'; } } class ChildClass2 extends TestClass {} echo TestClass::testStaticVar() . "\n"; echo TestClass::testStaticFunction() . "\n"; echo ChildClass1::testStaticVar() . "\n"; echo ChildClass1::testStaticFunction() . "\n"; echo ChildClass2::testStaticVar() . "\n"; echo ChildClass2::testStaticFunction() . "\n"; ?> --EXPECTF-- TestClassStatic TestClassFunction ChildClassStatic ChildClassFunction TestClassStatic TestClassFunction -- Edward Z. Yang GnuPG: 0x869C48DA HTML Purifier <http://htmlpurifier.org> Anti-XSS Filter [[ 3FA8 E9A9 7385 B691 A6FC B3CB A933 BE7D 869C 48DA ]]