PHP 省略できる参照渡しの引数

PHP のユーザー定義関数で省略可能な参照渡しの引数って作れないの?
というお話。

PHP 4.4.2 で実験。

内部関数では fsockopen() の errno や errstr みたいに、
引数を渡せばそこに値を書き込んでくれるし、省略してもオッケー。
という引数が存在します。

PHP: fsockopen - Manual

resource fsockopen ( string target [, int port [, int &errno [, string &errstr [, float timeout]]]] )

ユーザー定義関数で同じ事ができるのか。試してみました。

1. 参照渡し + デフォルト引数

function test( & $x = null )
{
    if ( ! is_null( $x ) )
    {
        $x = "zzz";
    }
}

結果 : & $x = null で構文エラー

2. func_get_arg()

$a = "aaa";
test( $a );
var_dump( $a );

function test()
{
    if ( func_num_args() >= 1 )
    {
        $x =& func_get_arg( 0 );
        $x = "zzz";
    }
}


結果 : "aaa" を表示 = func_get_arg() の戻り値では引数を参照できず

3. func_get_args()

$a = "aaa";
test( $a );
var_dump( $a );

function test()
{
    if ( func_num_args() >= 1 )
    {
        $x =& func_get_args();
        $x[ 0 ] = "zzz";
    }
}


結果 : "aaa" を表示 = func_get_args() の戻り値でも引数を参照できず

結論 : ユーザー定義関数では省略できる参照渡しの引数は作成できない。

たぶん。

以下参照 URL

PHP: 関数の引数 - Manual
PHP: func_get_arg - Manual
PHP: func_get_args - Manual

[PHP-jp 8714] 参照渡しでデフォルト引数を設定する
[PHP-users 12273] 可変長引数の参照渡し

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHP 省略できる参照渡しの引数

このブログ記事に対するトラックバックURL: http://je-pu-pu.jp/blog/mt-tb.cgi/674

コメントする

このブログ記事について

このページは、が2006年3月28日 23:59に書いたブログ記事です。

ひとつ前のブログ記事は「重い updatedb」です。

次のブログ記事は「IronPython デモムービー」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0