PHP 省略できる参照渡しの引数
PHP のユーザー定義関数で省略可能な参照渡しの引数って作れないの?
というお話。
PHP 4.4.2 で実験。
内部関数では fsockopen() の errno や errstr みたいに、
引数を渡せばそこに値を書き込んでくれるし、省略してもオッケー。
という引数が存在します。
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] 可変長引数の参照渡し
カテゴリ
developmentトラックバック(0)
このブログ記事を参照しているブログ一覧: PHP 省略できる参照渡しの引数
このブログ記事に対するトラックバックURL: http://je-pu-pu.jp/blog/mt-tb.cgi/674

コメントする