}
/* }}} */
+/* {{{ 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)
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)
--- /dev/null
+--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