PHP の関数の引数に未定義変数を参照渡しすると、関数の引数のデフォルト値が適用されない。
PHP の未定義変数は NULL になる
PHPでの参照渡し - Qiita http://qiita.com/akisssa/items/342d742c6ce9cd30b050
PHPでは原則的に未定義の変数の値を取得しようとしたときに Notice が発生して NULL 扱いになるが、参照渡しのデフォルト値の場合だけ例外的にNoticeを発生せずにNULLとして初期化される。この場合、関数側でデフォルト値に何を指定してもNULLと見なされることに注意する必要がある。
PHP: NULL - Manual http://php.net/manual/ja/language.types.null.php
変数は、以下の場合に NULL とみなされます。
・定数 NULL が代入されている場合。
・まだ値が何も代入されていない場合。
・unset() されている場合。
PHP では未定義の変数は NULL になる。という基本原則を覚えていれば良さそう。
関数の引数が値渡しの場合
サンプルコード
<?php
function test($x=100)
{
if (is_null($x)) {
echo "\$x=[null]", PHP_EOL;
} else {
echo "\$x=[$x]", PHP_EOL;
}
$x = 10000;
}
echo '【引数なし】', PHP_EOL;
test();
echo PHP_EOL;
echo '【0が代入された変数$aを引数に指定】', PHP_EOL;
$a = 0;
test($a);
echo "\$a=[$a]", PHP_EOL, PHP_EOL;
echo '【未定義の変数$bを引数に指定】', PHP_EOL;
test($b);
echo "\$b=[$b]", PHP_EOL, PHP_EOL;
実行結果
【引数なし】
$x=[100]
【0が代入された変数$aを引数に指定】
$x=[0]
$a=[0]
【未定義の変数$bを引数に指定】
PHP Notice: Undefined variable: b in /Users/foo/sample.php on line 23
Notice: Undefined variable: b in /Users/foo/sample.php on line 23
$x=[null]
PHP Notice: Undefined variable: b in /Users/foo/sample.php on line 24
Notice: Undefined variable: b in /Users/foo/sample.php on line 24
$b=[]
未定義変数を参照する際に、Notice が発生している。
関数の引数が参照渡しの場合
サンプルコード
<?php
function test(&$x=100)
{
if (is_null($x)) {
echo "\$x=[null]", PHP_EOL;
} else {
echo "\$x=[$x]", PHP_EOL;
}
$x = 10000;
}
echo '【引数なし】', PHP_EOL;
test();
echo PHP_EOL;
echo '【0が代入された変数$aを引数に指定】', PHP_EOL;
$a = 0;
test($a);
echo "\$a=[$a]", PHP_EOL, PHP_EOL;
echo '【未定義の変数$bを引数に指定】', PHP_EOL;
test($b);
echo "\$b=[$b]", PHP_EOL, PHP_EOL;
実行結果
【引数なし】
$x=[100]
【0が代入された変数$aを引数に指定】
$x=[0]
$a=[10000]
【未定義の変数$bを引数に指定】
$x=[null]
$b=[10000]
未定義変数を参照しても、Notice が発生していない。