- Add two new methods

- Fix signature, no need to cast it
This commit is contained in:
Marcus Boerger 2005-02-27 22:21:17 +00:00
parent c087f07233
commit c4bc32ff7b
2 changed files with 128 additions and 2 deletions

View File

@ -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)

View File

@ -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)