mirror of
https://github.com/php/php-src.git
synced 2025-01-20 18:53:37 +08:00
Fixed bug #30702 (cannot initialize class variable from class constant)
This commit is contained in:
parent
694f7a9e90
commit
5f600cdf57
39
Zend/tests/bug30702.phpt
Normal file
39
Zend/tests/bug30702.phpt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
--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)
|
||||||
|
}
|
@ -712,8 +712,13 @@ ZEND_API void zend_merge_properties(zval *obj, HashTable *properties, int destro
|
|||||||
ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC)
|
ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC)
|
||||||
{
|
{
|
||||||
if (!class_type->constants_updated) {
|
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->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);
|
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;
|
class_type->constants_updated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user