PHPでは、私は頻繁にたくさんの文字列操作をしています。文字列のようなプリミティブ型が値渡しされると、パフォーマンスに大きな影響を与えるため、コードを複数の関数に分割することは問題ありません。PHPのプリミティブデータ型は参照渡しですか?
答えて
オブジェクトのみが参照渡しされます。
PHPがコピーオンライトを使用するため、参照に変更することでパフォーマンスが向上するわけではありませんので、変数を変更するとコピーが作成されます。
あなたのコードを関数に分割しても、その観点から遅くなることはありません。 関数を呼び出すためのオーバーヘッドはわずかですが、10,000を呼び出すループ内にいなければ、心配する必要はないでしょう。
オブジェクトは参照渡しされます。 pass-by-reference with the & operatorを明示的に使用しない限り、他のすべてが価値に引き継がれます。
PHPは、不要なコピーを避けるため、copy-on-writeも使用しています。
はい、パラメータの前にアンパサンド&
を使用して、参照渡しする関数を明示的に定義しないか、引数の前にアンパサンドがある関数を呼び出さない限り、プリミティブは渡されます。 (後者は推奨されていません)
this part of the documentationを参照してください。それは多くの場合、ほとんどの目的のためにそのように考えることができても
EDIT
はまた、PHPに「オブジェクトは参照渡しされている」という文は、簡略化のビットです。このchapter of the documentationはその違いを説明しています。
デフォルトでは、値はすべて渡されます。参照で何かを渡したい場合は、それを明示的に述べる必要があります。
ここにはphp documentation that explicitly states this behaviorがあります。
参照渡しは実際にはPHPで値渡しよりも遅くなります。私はこの主張の正しい引用を見つけることができません。 PHPマニュアルの「参考文献」セクションのどこかにあります。
- 1. 参照渡しのメリット? (PHP)
- 2. コピーコンストラクタは、プリミティブデータ型
- 3. PHPで参照渡しを使うのは良いですか?
- 4. 値で参照型を渡す
- 5. 参照渡しですか?
- 6. 参照渡しと参照渡し
- 7. PHPのオブジェクトが値渡しか参照渡しですか?このコードで
- 8. プリミティブデータ型のオーバーライド
- 9. プリミティブデータ型のJava
- 10. PHP - グローバル参照と参照渡しを使用する
- 11. ポインタは参照渡しですか? (サニティチェック)
- 12. Mutexオブジェクトは参照渡しですか?
- 13. PHP:関数への参照渡しの配列ですか?
- 14. Javaの誤ったプリミティブデータ型ですか?
- 15. PHP配列、常に参照渡し
- 16. Javaは値渡しか参照渡しですか?
- 17. 参照型を参照型以外の参照型に変換する
- 18. ポインタへの参照対参照渡し?
- 19. PHP __set変数__getは参照渡しです
- 20. 参照型はオブジェクトですか?
- 21. 単純な型を参照渡ししない理由は?
- 22. PHPエクステンションに参照渡し変数を渡す
- 23. 渡す参照
- 24. 値渡しと参照渡しJavaScriptで
- 25. std :: thread渡しで参照渡しコピーコンストラクタ
- 26. Rubyでの参照渡し方は?
- 27. JNIでの参照渡し方は?
- 28. javaで参照渡し?
- 29. CComPtr参照渡し
- 30. 値渡し値渡し参照渡し
オブジェクトは参照渡しされません。オブジェクトは参照型ですが、特に指定しない限り、値は関数のパラメータとして渡されます。 – Joseph
技術的には参照渡しではありませんが、十分に近いです。これはPHP 5の時点で当てはまります - PHP 4は異なっていました。 – Greg