※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「関数仕様編 その6(参照について その3)」を公開しました。 「参照ってなに?」の説明、参話目でございます。 さて…この参照ですが。C言語などの言語をやっていると割と「自然に」扱いたくなるものなのですが、 書きましたとおり「C言語におけるポインタ」と「PHPにおける参照」は、色々と「違う物」なので、 同じように扱うと痛い目にあいます。 基本的に。 C言語などで「ポインタで扱う」のはおおまか「メモリを省略したい」ってのが初手に来て、 あとはそれに伴って「(データをcopyする、ってのをしないから)速度が速くなる」というのが利点の主軸かと思います (C言語、でポインタの、特に演算までを扱う理由は他に山盛りあるのですが、”C言語を書いている人が、 PHPにおいて参照を使おうと考える”理由、という観点で)。 PHPはその辺りが、仕組み的に「参照を使わなくても、元々内部で、参照に近い構造」を持っているので。 基本的には「リファレンス渡しをしてもしなくても概ね速度が変わらない」のは、 以下のコードで簡単に実験ができます。 function hoge($s) { echo $s; } function hoge_r(&$s) { echo $s; } // function test($func) { echo “test is {$func} \n”; var_dump( memory_get_usage() ); ob_start(); $start = microtime(true); for($i = 0; $i 100000; $i ++) { $p = ‘012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789’; $func($p); } $end = microtime(true); ob_end_clean(); var_dump( memory_get_usage() ); var_dump( $end – $start ); } // test(‘hoge’); test(‘hoge_r’); メモリの食い方含めて、ほとんど変わらないですね。厳密には、例えば筆者の環境だと test is hoge int(117616) int(117992) float(0.17729496955872) test is hoge_r int(117880) int(117992) float(0.18609499931335) この続きは以下をご覧くださいhttp://resocia.jp/column/1567/
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る