On 04/18/2012 12:31 AM, Yasuo Ohgaki wrote:
> Hi,
>
> 2012/4/18 Stefan Neufeind <[email protected]>:
>> On 04/18/2012 12:02 AM, Stefan Neufeind wrote:
>>> Hi,
>>>
>>> the topic of variable argument-lists for functions in connection with
>>> getting the parameters by reference came up. This is currently not
>>> possible with func_get_args(), though a "hack" with debug_backtrace() is
>>> possible.
[...]
> I don't know what you would like to do, but
>
> function calc(&$args = NULL) {
> var_dump(count($args)); // num of args
> $args[1] *= 2;
> }
> calc(array(1,2,3,4));
>
> would work.
Hi,
well yes, but that's not a variable number of parameters then :-)
As Johannes pointed out the problem is that PHP needs to know before
calling the function that it needs to work with references. Calling
calc($a, $b) (with no call-time pass-by-referefence of course)
I've tried the following things out:
function calc(&$dummy0 = NULL, &$dummy1 = NULL)
{
$d = &debug_backtrace();
$args = $d[0]['args'];
foreach($args as &$a)
{
$a *= 2;
}
}
=> Can have up to two "variable" parameters (since they have a default
of NULL). The workaround for allowing "more" variable would be to add
more dummies then *sigh* but would work.
What does not work:
function calc(&$dummy0 = NULL, &$dummy1 = NULL)
{
$args = func_get_args();
foreach($args as &$a)
{
$a *= 2;
}
}
since func_get_args() returns copies one way or the other.
Would it maybe be a good idea for func_get_args() to return an array
with references (as debug_backtrace() does) in case the parameters were
references when the function was called?
Kind regards,
Stefan
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php