[PHP-users 12273] 可変長引数の参照渡し

Kazunori Ito php-users@php.gr.jp
Thu, 19 Dec 2002 13:31:24 +0900


伊藤です。


通常、関数の引数を参照渡しする場合には、

//////////////////////////////////////////
function func(&$str)
{
    $str = "abc"
}
//////////////////////////////////////////

というふうに、関数の引数に(&)をつけると思うのですが、
関数の引数を可変長にした場合にはどのようにすれば
参照渡しができるのでしょうか?

リファレンス(&)について調べたところ、ポインタではなく
同じ変数を指す、エイリアスである、ということはわかったので、

//////////////////////////////////////////
function func()
{
    $str = &func_get_arg(0);
    $str = "abc"
}
//////////////////////////////////////////

というふうにやってみたのですが、参照渡しになりません。
func_get_arg自体がコピーされた値を返していれば、
この方法でも当然無理だとは思うのですが。。。

可変長引数の参照渡しについて、知っている方がおられましたら
ご教授願います。


以下、試したソースです。
//////////////////////////////////////////
function RefArgA(&$str)
{
    $str = "abc";
}
function RefArgB()
{
    $str =& func_get_arg(0);
    $str = "def";
}
function RefArgC()
{
    $str = func_get_arg(0);
    $str = "ghi";
}

RefArgA($a);
print("RefArgA:" . $a . "<BR>");
RefArgB($b);
print("RefArgB:" . $b . "<BR>");
RefArgC(&$c);
print("RefArgC:" . $c . "<BR>");
//////////////////////////////////////////

<結果>
RefArgA:abc
RefArgB:
RefArgC:


環境は以下のとおりです。
RedHatLinux7.2
apache 1.3.26
php 4.2.2