mirror of
https://github.com/php/php-src.git
synced 2024-09-22 18:37:25 +00:00
- Add two new methods
- Fix signature, no need to cast it
This commit is contained in:
parent
c087f07233
commit
c4bc32ff7b
@ -182,7 +182,7 @@ static void reflection_register_implement(zend_class_entry *class_entry, zend_cl
|
||||
class_entry->interfaces[num_interfaces - 1] = interface_entry;
|
||||
}
|
||||
|
||||
static void reflection_free_objects_storage(zend_object *object TSRMLS_DC)
|
||||
static void reflection_free_objects_storage(void *object TSRMLS_DC)
|
||||
{
|
||||
reflection_object *intern = (reflection_object *) object;
|
||||
|
||||
@ -2309,6 +2309,67 @@ ZEND_METHOD(reflection_class, getStaticProperties)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public mixed ReflectionClass::getStaticPropertyValue(string name [, mixed default])
|
||||
Returns the value of a tsstic property */
|
||||
ZEND_METHOD(reflection_class, getStaticPropertyValue)
|
||||
{
|
||||
reflection_object *intern;
|
||||
zend_class_entry *ce;
|
||||
char *name;
|
||||
int name_len;
|
||||
zval **prop, *def_value = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &name, &name_len, &def_value) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
GET_REFLECTION_OBJECT_PTR(ce);
|
||||
|
||||
zend_update_class_constants(ce TSRMLS_CC);
|
||||
prop = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC);
|
||||
if (!prop) {
|
||||
if (def_value) {
|
||||
RETURN_ZVAL(def_value, 1, 0);
|
||||
} else {
|
||||
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
|
||||
"Class %s does not have a property named %s", ce->name, name);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
RETURN_ZVAL(*prop, 1, 0);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public void ReflectionClass::setStaticPropertyValue($name, $value)
|
||||
Sets the value of a static property */
|
||||
ZEND_METHOD(reflection_class, setStaticPropertyValue)
|
||||
{
|
||||
reflection_object *intern;
|
||||
zend_class_entry *ce;
|
||||
char *name;
|
||||
int name_len;
|
||||
zval **variable_ptr, *value;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &name, &name_len, &value) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
GET_REFLECTION_OBJECT_PTR(ce);
|
||||
|
||||
zend_update_class_constants(ce TSRMLS_CC);
|
||||
variable_ptr = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC);
|
||||
if (!variable_ptr) {
|
||||
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
|
||||
"Class %s does not have a property named %s", ce->name, name);
|
||||
return;
|
||||
}
|
||||
zval_dtor(*variable_ptr);
|
||||
**variable_ptr = *value;
|
||||
zval_copy_ctor(*variable_ptr);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public array ReflectionClass::getDefaultProperties()
|
||||
Returns an associative array containing copies of all default property values of the class */
|
||||
ZEND_METHOD(reflection_class, getDefaultProperties)
|
||||
@ -3721,6 +3782,8 @@ static zend_function_entry reflection_class_functions[] = {
|
||||
ZEND_ME(reflection_class, getParentClass, NULL, 0)
|
||||
ZEND_ME(reflection_class, isSubclassOf, NULL, 0)
|
||||
ZEND_ME(reflection_class, getStaticProperties, NULL, 0)
|
||||
ZEND_ME(reflection_class, getStaticPropertyValue, NULL, 0)
|
||||
ZEND_ME(reflection_class, setStaticPropertyValue, NULL, 0)
|
||||
ZEND_ME(reflection_class, getDefaultProperties, NULL, 0)
|
||||
ZEND_ME(reflection_class, isIterateable, NULL, 0)
|
||||
ZEND_ME(reflection_class, implementsInterface, NULL, 0)
|
||||
|
@ -182,7 +182,7 @@ static void reflection_register_implement(zend_class_entry *class_entry, zend_cl
|
||||
class_entry->interfaces[num_interfaces - 1] = interface_entry;
|
||||
}
|
||||
|
||||
static void reflection_free_objects_storage(zend_object *object TSRMLS_DC)
|
||||
static void reflection_free_objects_storage(void *object TSRMLS_DC)
|
||||
{
|
||||
reflection_object *intern = (reflection_object *) object;
|
||||
|
||||
@ -2309,6 +2309,67 @@ ZEND_METHOD(reflection_class, getStaticProperties)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public mixed ReflectionClass::getStaticPropertyValue(string name [, mixed default])
|
||||
Returns the value of a tsstic property */
|
||||
ZEND_METHOD(reflection_class, getStaticPropertyValue)
|
||||
{
|
||||
reflection_object *intern;
|
||||
zend_class_entry *ce;
|
||||
char *name;
|
||||
int name_len;
|
||||
zval **prop, *def_value = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &name, &name_len, &def_value) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
GET_REFLECTION_OBJECT_PTR(ce);
|
||||
|
||||
zend_update_class_constants(ce TSRMLS_CC);
|
||||
prop = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC);
|
||||
if (!prop) {
|
||||
if (def_value) {
|
||||
RETURN_ZVAL(def_value, 1, 0);
|
||||
} else {
|
||||
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
|
||||
"Class %s does not have a property named %s", ce->name, name);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
RETURN_ZVAL(*prop, 1, 0);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public void ReflectionClass::setStaticPropertyValue($name, $value)
|
||||
Sets the value of a static property */
|
||||
ZEND_METHOD(reflection_class, setStaticPropertyValue)
|
||||
{
|
||||
reflection_object *intern;
|
||||
zend_class_entry *ce;
|
||||
char *name;
|
||||
int name_len;
|
||||
zval **variable_ptr, *value;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &name, &name_len, &value) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
GET_REFLECTION_OBJECT_PTR(ce);
|
||||
|
||||
zend_update_class_constants(ce TSRMLS_CC);
|
||||
variable_ptr = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC);
|
||||
if (!variable_ptr) {
|
||||
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
|
||||
"Class %s does not have a property named %s", ce->name, name);
|
||||
return;
|
||||
}
|
||||
zval_dtor(*variable_ptr);
|
||||
**variable_ptr = *value;
|
||||
zval_copy_ctor(*variable_ptr);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto public array ReflectionClass::getDefaultProperties()
|
||||
Returns an associative array containing copies of all default property values of the class */
|
||||
ZEND_METHOD(reflection_class, getDefaultProperties)
|
||||
@ -3721,6 +3782,8 @@ static zend_function_entry reflection_class_functions[] = {
|
||||
ZEND_ME(reflection_class, getParentClass, NULL, 0)
|
||||
ZEND_ME(reflection_class, isSubclassOf, NULL, 0)
|
||||
ZEND_ME(reflection_class, getStaticProperties, NULL, 0)
|
||||
ZEND_ME(reflection_class, getStaticPropertyValue, NULL, 0)
|
||||
ZEND_ME(reflection_class, setStaticPropertyValue, NULL, 0)
|
||||
ZEND_ME(reflection_class, getDefaultProperties, NULL, 0)
|
||||
ZEND_ME(reflection_class, isIterateable, NULL, 0)
|
||||
ZEND_ME(reflection_class, implementsInterface, NULL, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user