0

null基本的に、大きな配列を操作する場合、エラーが発生した場合に$array = null戻すと便利$array[] = 1です。許容値として受け入れます。基本的には、エラー処理コードがあれば簡単にエラーとして識別できるので便利ですが、気にしない場合は簡単に無視することもできます。[ 1 ]nullfunction (array $array = null)nullnull

ほとんどの場合、これはかなり簡単ですが、PHP が実際にはそれほどうまくサポートしていないというまれなケースがあります。時々 null を返しますが、それ以外の場合は参照を返します (ほとんどの場合、インスタンス変数への参照を返すため、これは問題ではありませんが、そうでない場合もあります)。null扱いにくい方法で値を指定して関数を呼び出す場合もあります。

参照を渡す理由は明らかに、配列をコピーする手間を省くためです (特に配列が非常に大きい場合)。

次の「解決策」...

\error_reporting(-1);

function & nil()
{
    $nil = null;
    return $nil;
}

function & pass(array & $variable = null)
{
    return $variable;
}

function & check ()
{
    return nil();
}

$test = pass(nil());
$test = &pass(nil());

$test1 = &check();
$test1[] = 1;
$test2 = &check();
$test2[] = 2;

\var_dump($test1, $test2);

動作しますが...

私の質問は、ローカル変数へのすべての参照がガベージ コレクションされる前に、ローカル変数がガベージ コレクションされないことを PHP が保証するかどうかです。またはその未定義の動作です。

4

1 に答える 1

2

参照カウントが 0 より大きい間、PHP は何も GC しません。

于 2013-02-01T10:21:29.257 に答える