]> granicus.if.org Git - php/commitdiff
- Added ReflectionParameter::canBePassedByValue().
authorGustavo André dos Santos Lopes <cataphract@php.net>
Tue, 26 Oct 2010 15:01:36 +0000 (15:01 +0000)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Tue, 26 Oct 2010 15:01:36 +0000 (15:01 +0000)
UPGRADING
ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt [new file with mode: 0644]

index 048eb5a5f7781c1d986516ee5ec79b0343707b4f..abaf7baf524cd51beaf0e905518859600dd16c0a 100755 (executable)
--- a/UPGRADING
+++ b/UPGRADING
@@ -299,6 +299,7 @@ UPGRADE NOTES - PHP X.Y
          - ReflectionClass::getTraits()
          - ReflectionClass::getTraitNames()
          - ReflectionClass::getTraitAliases()
+         - ReflectionParameter::canBePassedByValue()
        
        - PDO_dblib
          - PDO::newRowset()
index 467b965ced5e23f9653a791e80ab5bdbab5e14eb..67fc992ead457561ffd77cbb0de1217b4dd86d55 100644 (file)
@@ -2519,6 +2519,23 @@ ZEND_METHOD(reflection_parameter, isPassedByReference)
 }
 /* }}} */
 
+/* {{{ proto public bool ReflectionParameter::canBePassedByValue()
+   Returns whether this parameter can be passed by value */
+ZEND_METHOD(reflection_parameter, canBePassedByValue)
+{
+       reflection_object *intern;
+       parameter_reference *param;
+
+       if (zend_parse_parameters_none() == FAILURE) {
+               return;
+       }
+       GET_REFLECTION_OBJECT_PTR(param);
+
+       /* true if it's ZEND_SEND_BY_VAL or ZEND_SEND_PREFER_REF */
+       RETVAL_BOOL(param->arg_info->pass_by_reference != ZEND_SEND_BY_REF);
+}
+/* }}} */
+
 /* {{{ proto public bool ReflectionParameter::getPosition()
    Returns whether this parameter is an optional parameter */
 ZEND_METHOD(reflection_parameter, getPosition)
@@ -5901,6 +5918,7 @@ static const zend_function_entry reflection_parameter_functions[] = {
        ZEND_ME(reflection_parameter, __toString, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, getName, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, isPassedByReference, arginfo_reflection__void, 0)
+       ZEND_ME(reflection_parameter, canBePassedByValue, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, getDeclaringFunction, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, getDeclaringClass, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, getClass, arginfo_reflection__void, 0)
diff --git a/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt b/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt
new file mode 100644 (file)
index 0000000..82c6200
--- /dev/null
@@ -0,0 +1,84 @@
+--TEST--\r
+ReflectionParameter class - canBePassedByValue() method.\r
+--FILE--\r
+<?php\r
+\r
+function aux($fun) {\r
+\r
+    $func = new ReflectionFunction($fun);\r
+    $parameters = $func->getParameters();\r
+    foreach($parameters as $parameter) {\r
+        echo "Name: ", $parameter->getName(), "\n";\r
+        echo "Is passed by reference: ", $parameter->isPassedByReference()?"yes":"no", "\n";\r
+        echo "Can be passed by value: ", $parameter->canBePassedByValue()?"yes":"no", "\n";\r
+        echo "\n";\r
+    }\r
+\r
+}\r
+\r
+echo "=> array_multisort:\n\n";\r
+\r
+aux('array_multisort');\r
+\r
+\r
+echo "=> sort:\n\n";\r
+\r
+aux('sort');\r
+\r
+echo "=> user function:\n\n";\r
+\r
+function ufunc(&$arg1, $arg2) {}\r
+\r
+aux('ufunc');\r
+\r
+echo "Done.\n";\r
+\r
+?>\r
+--EXPECTF--\r
+=> array_multisort:\r
+\r
+Name: arr1\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+Name: SORT_ASC_or_SORT_DESC\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+Name: SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+Name: arr2\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+Name: SORT_ASC_or_SORT_DESC\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+Name: SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
+=> sort:\r
+\r
+Name: arg\r
+Is passed by reference: yes\r
+Can be passed by value: no\r
+\r
+Name: sort_flags\r
+Is passed by reference: no\r
+Can be passed by value: yes\r
+\r
+=> user function:\r
+\r
+Name: arg1\r
+Is passed by reference: yes\r
+Can be passed by value: no\r
+\r
+Name: arg2\r
+Is passed by reference: no\r
+Can be passed by value: yes\r
+\r
+Done.\r