mirror of
https://github.com/php/php-src.git
synced 2024-11-27 03:44:07 +08:00
- Fixed bug #51905 (ReflectionParameter fails if default value is an array with an access to self::)
This commit is contained in:
parent
433cb868d6
commit
79d2aaf0f1
@ -156,6 +156,8 @@ static zend_always_inline int i_zend_is_true(zval *op)
|
||||
}
|
||||
|
||||
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC);
|
||||
ZEND_API int zval_update_constant_inline_change(zval **pp, void *arg TSRMLS_DC);
|
||||
ZEND_API int zval_update_constant_no_inline_change(zval **pp, void *arg TSRMLS_DC);
|
||||
ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC);
|
||||
|
||||
/* dedicated Zend executor functions - do not use! */
|
||||
|
@ -684,13 +684,25 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco
|
||||
}
|
||||
zval_dtor(&const_value);
|
||||
}
|
||||
zend_hash_apply_with_argument(Z_ARRVAL_P(p), (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
|
||||
zend_hash_apply_with_argument(Z_ARRVAL_P(p), (apply_func_arg_t) zval_update_constant_inline_change, (void *) scope TSRMLS_CC);
|
||||
zend_hash_internal_pointer_reset(Z_ARRVAL_P(p));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int zval_update_constant_inline_change(zval **pp, void *scope TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return zval_update_constant_ex(pp, (void*)1, scope TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int zval_update_constant_no_inline_change(zval **pp, void *scope TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return zval_update_constant_ex(pp, (void*)0, scope TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return zval_update_constant_ex(pp, arg, NULL TSRMLS_CC);
|
||||
|
28
ext/reflection/tests/bug51905.phpt
Normal file
28
ext/reflection/tests/bug51905.phpt
Normal file
@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
Bug #51905 (ReflectionParameter fails if default value is an array with an access to self::)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class Bar {
|
||||
const Y = 20;
|
||||
}
|
||||
|
||||
class Foo extends Bar {
|
||||
const X = 12;
|
||||
public function x($x = 1, $y = array(self::X), $z = parent::Y) {}
|
||||
}
|
||||
|
||||
$clazz = new ReflectionClass('Foo');
|
||||
$method = $clazz->getMethod('x');
|
||||
foreach ($method->getParameters() as $param) {
|
||||
if ( $param->isDefaultValueAvailable())
|
||||
echo '$', $param->getName(), ' : ', var_export($param->getDefaultValue(), 1), "\n";
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
$x : 1
|
||||
$y : array (
|
||||
0 => 12,
|
||||
)
|
||||
$z : 20
|
Loading…
Reference in New Issue
Block a user