PHP では、多くの文字列操作を頻繁に行っています。文字列のようなプリミティブ型が値渡しされると、パフォーマンスに大きな影響を与えるため、コードを複数の関数に分割しても問題ありませんか。
5 に答える
オブジェクトのみが参照によって渡されます。
ただし、参照に変更することでパフォーマンスが向上するわけではありません。PHP はコピー オン ライトを使用するため、変数を変更した場合にのみコピーが作成されます。
コードを関数に分割しても、その観点からは遅くなりません。関数を呼び出すにはわずかなオーバーヘッドがありますが、10,000 個の関数を呼び出すループでない限り、おそらく気にする必要はありません。
オブジェクトは参照によって渡されます。& 演算子で参照渡しを明示的に使用しない限り、他のすべては値によって渡されます。
そうは言っても、PHP は不要なコピーを避けるためにコピーオン ライトも使用します。
デフォルトでは、すべてが値で渡されます。参照によって何かを渡したい場合は、そのように明示的に述べる必要があります。
これは、この動作を明示的に示しているphpドキュメントです。
参照による受け渡しは、実際にはPHPの値による受け渡しよりも低速です。この主張の正しい引用が見つかりません。これは、PHPマニュアルの「リファレンス」セクションのどこかにあります。
はい、プリミティブは、参照渡しする関数を明示的に定義する (&
パラメーターの前にアンパサンドを使用する) か、引数の前にアンパサンドを使用して関数を呼び出す場合を除き、値によって渡されます。(後者は非推奨です)
詳細については、ドキュメントのこの部分を参照してください。
編集
また、PHP での「オブジェクトは参照によって渡される」という記述は少し単純化されていますが、ほとんどの目的ではそのように考えることができます。ドキュメントのこの章では、違いについて説明します。