Ich stand kürzlich auch vor dem Problem und habs dann aufgegeben. Wenn du eine Lösung hast, dann poste mal. Ich denke aber, es scheitert einfach an er Unmöglichkiet, eine Referenz auf NULL zu bekommen.
Hier hab ich mal ein wenig rumgespielt:
PHP-Code:
<?php
function foo($args = array())
{
$backtrace = debug_backtrace();
echo "Die Funktion {$backtrace[1]['function']} wurde mit folgenden Parametern aufgerufen:<pre>";
var_dump($args);
echo '</pre>';
}
function bar()
{
foo(func_get_args());
}
function baz($test)
{
foo(func_get_args());
}
echo '<h1>Aufruf mit "normalen" Parametern aus der einen Funktion</h1>';
bar ('x', array('y', 'z'), dir('.'));
echo '<h1>...und aus der anderen Funktion heraus</h1>';
baz (0, false, NULL);
echo '<h1>Passing by Reference bei fest definierter Anzahl der Argumente</h1>';
function foo1 (&$arg)
{
$arg = 42;
}
function bar1 (&$arg)
{
foo1($arg);
}
$test = 17;
bar1($test);
echo "Wert wird erfolgreich geaendert: $test";
echo '<h1>Passing by Reference bei variabler Anzahl der Argumente</h1>';
function foo2 (&$args)
{
$args[0] = 42;
}
function bar2 (&$arg1)
{
foo2(func_get_args());
}
$test = 17;
bar2($test);
echo "Hier gehen die Referenzen natuerlich floeten: $test";
echo '<h1>Workaround</h1>';
echo 'kann natuerlich nicht gehen, da du keine Referenz auf NULL haben kannst';
function foo3 (&$arg1, &$arg2, &$arg3, &$argn)
{
$arg1 = 42;
}
function bar3 (&$arg)
{
foo3($arg);
}
$test = 17;
bar3($test);
?>