2016年9月5日月曜日

【PHP】 関数・メソッドのパラメタとして配列を渡した場合の処理

こういう説明は、検索してもなかなか引っかからない。明快な説明をみつけたので、メモ。

>>>>>>
関数に配列が値渡しの引数として与えられた場合、PHPはその時点ではスタック領域のポインタアドレスを渡している(配列のコピーは作られていない)が、配列に変更があった時点でその配列のヒープ領域がコピーされ別の変数として新しいスタック領域に別のポインタアドレスが保存される。

明示的に参照渡しとして関数に配列が引数として与えられた場合は、配列に変化を加えても新しいスタック領域は確保されず、参照で与えられたポインタアドレスのヒープ領域の配列が変化する。

値渡しであっても参照渡し(ポインタ渡し)であっても,最初の段階ではどちらも参照渡しの状態になるが、明示的に参照渡しをしない限り、配列が変更されたタイミングで元の配列がコピーされ、新しい配列が生成される。
<<<<<<

小さな配列なら変更後の配列を返す関数でも問題ないだろうが、大きくなる場合は注意を要する。

情報元 : http://memo.choimemo.net/?p=441

0 件のコメント: