【PHP】参照渡しと値渡しの速度比較

普通に考えて同じメモリ空間を利用するので「参照渡し」のほうが速いと思いますが、いったいどれくらい違うのか調べた(検索した)メモ。

ここに実際テストコードを書いて実験した人の結果が。

「参照渡し」のほうが少し(10%ぐらい)速いらしいです。
あと参考になったのが

関数に渡した時点ではどちらも「実体」を示す「ポインタのようなもの」が渡されていて、関数内で変更された時はじめて渡した値がコピーされるという動作のようです。つまり受け取った変数を変更しなければ値渡しと参照渡しで差は無いということです。

ということ。

PHPのコードレビューをするときは

  • 数値、文字列、配列は値渡し。
  • オブジェクトは参照渡し。
  • 数値、文字列、配列は特別な事情がない限り参照渡しは使わない。
  • なるべくメンバ変数やオブジェクトに格納して使う。

というのを意識してますが、たまに参照渡しをがっつり書いているコードを見かけます。
理由を聞いてみると大抵「その方が速いと思いました」という答えが返ってくる。

そりゃ速いだろうけど、そのようなコードは関数(メソッド)間の「結合」が強すぎて、他のプログラムからは再利用しづらし、あとで似たようなコード(関数、メソッド)が増えてしまい全体として遅くなるし、バグも多くなる。

でも、まぁ実行速度を考えているのは良いことかな・・・。

ちゃんと動いているように見えてもコードは崩れかけのジェンガのように危なっかしいものだったりするので、コードレビューの大切さを実感する瞬間です。

軽量、軽快なPHPフレームワーク「pettiwork」