2

関数my_funcが次のように定義されている場合:

function my_func(&$arr) {
    array_push($arr, 0);
    array_push($arr, 1);
    array_push($arr, 2);
    array_push($arr, 3);
    array_push($arr, 4);
}

次のように呼び出すmy_funcと、結果は期待どおりです。

$test_array = array();
my_func($test_array);
print_r($test_array);

結果:

配列
((
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)。

my_func次のように呼び出すことで、このコードをいくらか短縮できると考えていました。

my_func($test_array = array());
print_r($test_array);

ただし、結果は変わります。

配列
((
)。

この短いコードスニペットが異なる結果をもたらすのはなぜですか?

4

1 に答える 1

5

参照によって変数を渡すのではなく、の値を渡します。

すべてのエラーを有効にすると、次のメッセージが表示されます。

Strict Standards: Only variables should be passed by reference in 

割り当ての値は、それ自体に割り当てられている値です。に渡されるのは、その値(配列のコピー)ですmy_func

この問題に関するPHPのドキュメントでは、これをより強力に示しています。

結果は未定義であるため、他の式を参照で渡すことはできません。

結論:関数から返された変数(、、)、新しいオブジェクト、または参照のみ$xを、参照を期待する関数$x[0]に渡します。$x->a

于 2012-11-25T19:59:46.563 に答える