]> granicus.if.org Git - php/commitdiff
- Fix bug #29523 (ReflectionParameter::isOptional() is incorrect)
authorMarcus Boerger <helly@php.net>
Wed, 4 Aug 2004 22:47:56 +0000 (22:47 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 4 Aug 2004 22:47:56 +0000 (22:47 +0000)
Zend/zend_reflection_api.c
ext/reflection/php_reflection.c
ext/reflection/tests/bug29523.phpt [new file with mode: 0755]

index fe8706ebcbda359b7ae8c663e9cd5b7ba7977cee..a7f9d2c144494ea5d2e56612ec4093fd93885dda 100644 (file)
@@ -833,7 +833,7 @@ static void reflection_extension_factory(zval *object, char *name_str TSRMLS_DC)
 /* }}} */
 
 /* {{{ reflection_parameter_factory */
-static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, zval *object TSRMLS_DC)
+static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, int required, zval *object TSRMLS_DC)
 {
        reflection_object *intern;
        parameter_reference *reference;
@@ -850,6 +850,7 @@ static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int of
        reference = (parameter_reference*) emalloc(sizeof(parameter_reference));
        reference->arg_info = arg_info;
        reference->offset = offset;
+       reference->required = required;
        intern->ptr = reference;
        intern->free_ptr = 1;
        zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL);
@@ -1413,7 +1414,7 @@ ZEND_METHOD(reflection_function, getParameters)
                 zval *parameter;   
 
                 ALLOC_ZVAL(parameter);
-                reflection_parameter_factory(arg_info, i, parameter TSRMLS_CC);
+                reflection_parameter_factory(arg_info, i, fptr->common.required_num_args, parameter TSRMLS_CC);
                 add_next_index_zval(return_value, parameter);
                 
                 arg_info++;
index fe8706ebcbda359b7ae8c663e9cd5b7ba7977cee..a7f9d2c144494ea5d2e56612ec4093fd93885dda 100644 (file)
@@ -833,7 +833,7 @@ static void reflection_extension_factory(zval *object, char *name_str TSRMLS_DC)
 /* }}} */
 
 /* {{{ reflection_parameter_factory */
-static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, zval *object TSRMLS_DC)
+static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, int required, zval *object TSRMLS_DC)
 {
        reflection_object *intern;
        parameter_reference *reference;
@@ -850,6 +850,7 @@ static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int of
        reference = (parameter_reference*) emalloc(sizeof(parameter_reference));
        reference->arg_info = arg_info;
        reference->offset = offset;
+       reference->required = required;
        intern->ptr = reference;
        intern->free_ptr = 1;
        zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL);
@@ -1413,7 +1414,7 @@ ZEND_METHOD(reflection_function, getParameters)
                 zval *parameter;   
 
                 ALLOC_ZVAL(parameter);
-                reflection_parameter_factory(arg_info, i, parameter TSRMLS_CC);
+                reflection_parameter_factory(arg_info, i, fptr->common.required_num_args, parameter TSRMLS_CC);
                 add_next_index_zval(return_value, parameter);
                 
                 arg_info++;
diff --git a/ext/reflection/tests/bug29523.phpt b/ext/reflection/tests/bug29523.phpt
new file mode 100755 (executable)
index 0000000..01c83c2
--- /dev/null
@@ -0,0 +1,38 @@
+--TEST--
+Bug #29523 (ReflectionParameter::isOptional() is incorrect)
+--FILE--
+<?php
+
+class TestClass
+{
+}
+
+function optionalTest(TestClass $a, TestClass $b, $c = 3)
+{
+}
+
+$function = new ReflectionFunction('optionalTest'); 
+$numberOfNotOptionalParameters = 0;
+$numberOfOptionalParameters = 0;
+foreach($function->getParameters() as $parameter)
+{
+       var_dump($parameter->isOptional());
+       if ($parameter->isOptional())
+       {
+               ++$numberOfOptionalParameters;
+       }
+       else
+       {
+               ++$numberOfNotOptionalParameters;
+       }
+}
+var_dump($function->getNumberOfRequiredParameters());
+var_dump($numberOfNotOptionalParameters);
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(true)
+int(2)
+int(2)