From e5c7fae82cdff7086fb14b5de78a70d55ec73955 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gustavo=20Andr=C3=A9=20dos=20Santos=20Lopes?= Date: Tue, 26 Oct 2010 15:01:36 +0000 Subject: [PATCH] - Added ReflectionParameter::canBePassedByValue(). --- UPGRADING | 1 + ext/reflection/php_reflection.c | 18 ++++ ...eflectionParameter_canBePassedByValue.phpt | 84 +++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt diff --git a/UPGRADING b/UPGRADING index 048eb5a5f7..abaf7baf52 100755 --- 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() diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 467b965ced..67fc992ead 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -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 index 0000000000..82c6200122 --- /dev/null +++ b/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt @@ -0,0 +1,84 @@ +--TEST-- +ReflectionParameter class - canBePassedByValue() method. +--FILE-- +getParameters(); + foreach($parameters as $parameter) { + echo "Name: ", $parameter->getName(), "\n"; + echo "Is passed by reference: ", $parameter->isPassedByReference()?"yes":"no", "\n"; + echo "Can be passed by value: ", $parameter->canBePassedByValue()?"yes":"no", "\n"; + echo "\n"; + } + +} + +echo "=> array_multisort:\n\n"; + +aux('array_multisort'); + + +echo "=> sort:\n\n"; + +aux('sort'); + +echo "=> user function:\n\n"; + +function ufunc(&$arg1, $arg2) {} + +aux('ufunc'); + +echo "Done.\n"; + +?> +--EXPECTF-- +=> array_multisort: + +Name: arr1 +Is passed by reference: yes +Can be passed by value: yes + +Name: SORT_ASC_or_SORT_DESC +Is passed by reference: yes +Can be passed by value: yes + +Name: SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING +Is passed by reference: yes +Can be passed by value: yes + +Name: arr2 +Is passed by reference: yes +Can be passed by value: yes + +Name: SORT_ASC_or_SORT_DESC +Is passed by reference: yes +Can be passed by value: yes + +Name: SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING +Is passed by reference: yes +Can be passed by value: yes + +=> sort: + +Name: arg +Is passed by reference: yes +Can be passed by value: no + +Name: sort_flags +Is passed by reference: no +Can be passed by value: yes + +=> user function: + +Name: arg1 +Is passed by reference: yes +Can be passed by value: no + +Name: arg2 +Is passed by reference: no +Can be passed by value: yes + +Done. -- 2.40.0