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. PHPのオブジェクトが値渡しか参照渡しですか?このコードで
- 6. プリミティブデータ型のオーバーライド
- 7. Mutexオブジェクトは参照渡しですか?
- 8. ポインタは参照渡しですか? (サニティチェック)
- 9. PHP:関数への参照渡しの配列ですか?
- 10. PHP配列、常に参照渡し
- 11. Javaの誤ったプリミティブデータ型ですか?
- 12. 参照型を参照型以外の参照型に変換する
- 13. PHP __set変数__getは参照渡しです
- 14. 単純な型を参照渡ししない理由は?
- 15. std :: thread渡しで参照渡しコピーコンストラクタ
- 16. 値渡しと参照渡しJavaScriptで
- 17. PHPエクステンションに参照渡し変数を渡す
- 18. CComPtr参照渡し
- 19. 参照型はオブジェクトですか?
- 20. javaで参照渡し?
- 21. 値渡し値渡し参照渡し
- 22. C側の参照渡し?
- 23. 参照渡しのパラメーターパック
- 24. 参照渡しの疑問
- 25. pthreadの参照渡し値
- 26. はXcodeで参照渡し、C言語
- 27. 参照渡し、異なる基底型のエラー
- 28. 多型参照
- 29. フォームオブジェクトを参照渡しに渡す
- 30. 参照でベクトルを渡す
オブジェクトは参照渡しされません。オブジェクトは参照型ですが、特に指定しない限り、値は関数のパラメータとして渡されます。 – Joseph
技術的には参照渡しではありませんが、十分に近いです。これはPHP 5の時点で当てはまります - PHP 4は異なっていました。 – Greg