- Fixed bug #31363 (broken non-blocking flock()). ian at snork dot net
- Fixed bug #30833 (array_count_values() modifying input array). (Tony)
- Fixed bug #30819 (Better support for LDAP SASL bind). (Jani)
+- Fixed bug #30702 (cannot initialize class variable from class constant).
+ (Dmitry)
- Fixed bug #29944 (Function defined in switch, crashes). (Dmitry)
- Fixed bug #29583 (crash when echoing a COM object). (M.Sisolak, Wez)
- Fixed bug #28839 (SIGSEGV in interactive mode (php -a)).
--- /dev/null
+--TEST--
+Bug #30702 cannot initialize class variable from class constant
+--FILE--
+<?php
+class foo {
+ const C1=1;
+}
+
+class bar extends foo {
+ const C2=2;
+
+ public $c1=bar::C1;
+ public $c2=bar::C2;
+
+ public $c3=self::C1;
+ public $c4=self::C2;
+
+ public $c5=foo::C1;
+ public $c6=parent::C1;
+}
+
+$x= new bar();
+var_dump($x);
+?>
+--EXPECT--
+object(bar)#1 (6) {
+ ["c1"]=>
+ int(1)
+ ["c2"]=>
+ int(2)
+ ["c3"]=>
+ int(1)
+ ["c4"]=>
+ int(2)
+ ["c5"]=>
+ int(1)
+ ["c6"]=>
+ int(1)
+}
ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC)
{
if (!class_type->constants_updated) {
+ zend_class_entry **scope = EG(in_execution)?&EG(scope):&CG(active_class_entry);
+ zend_class_entry *old_scope = *scope;
+
+ *scope = class_type;
zend_hash_apply_with_argument(&class_type->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
zend_hash_apply_with_argument(class_type->static_members, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
+ *scope = old_scope;
class_type->constants_updated = 1;
}
}