在PHP中,我经常进行大量的字符串操作。将我的代码分割成多个函数是可以的,因为如果像字符串这样的基本类型是按值传递的,我会显着影响性能。PHP中的原始数据类型是否通过引用传递?
1
A
回答
7
只有对象通过引用传递。
这并不意味着您可以通过更改引用来获得性能提升--PHP使用写时复制,因此只有在修改变量时才会生成副本。
将代码分割成函数不会减慢它的速度。 调用一个函数有一个小的开销,但除非你在一个循环中调用了10,000个函数,否则它可能不是你需要担心的。
2
对象通过引用传递。除非您明确使用pass-by-reference with the & operator,否则其他一切都按价值传递。
这就是说,PHP也使用copy-on-write来避免不必要的复制。
1
是的,原语是由值来传递除非显式定义通过引用传递(通过在参数的前需使用符号&
)或用在参数的前方的符号调用该函数的函数。 (后者已弃用)
请参阅this part of the documentation了解更多信息。
编辑
另外,在PHP的“对象是通过引用传递”的说法是有点简单化,虽然它往往可以在大多数情况被认为是这样的。这chapter of the documentation解释了不同之处。
1
默认情况下,所有内容都按值传递。如果你想通过引用传递某些东西,你必须明确地声明它。
1
通过引用传递实际上比在PHP中传递值慢。我找不到这个说法的正确引用;它位于PHP手册的“参考”部分。
相关问题
- 1. 通过原始HTTP传递POST数据
- 2. 通过引用传递父级PHP类
- 3. PHP:如何知道参数是否通过引用传递?
- 4. 我是否正确传递参数并通过引用传递?
- 5. 如何通过引用传递基元数据类型?
- 6. 是否可以通过csv2geojson.js中的特定属性传递数据类型?
- 7. 通过方差索引原始数据
- 8. Java是通过值传递还是通过引用传递?
- 9. PHP中的对象是通过值还是引用传递的?
- 10. 未设置通过引用传递,也取消原始值
- 11. 是否通过引用传递了php资源?
- 12. 通过引用传递数据成员
- 13. 通过引用在PHP中传递数据库连接
- 14. 我可以将非原始数据类型传递给WebMethod吗?
- 15. 通过引用传递的整型类型
- 16. 是否可以使用call_user_func_array()通过引用传递参数?
- 17. 通过层传递类型
- 18. LINQ表达式中的值是否通过引用传递?
- 19. 对象是否通过JavaScript中的引用或值传递?
- 20. WebSphere Liberty中是否存在通过引用设置的传递?
- 21. Struts 2原始类型的数据传输和类型转换
- 22. numpy数组是否通过引用传递?
- 23. Javascript是否通过引用或值传递数组?
- 24. 在C++函数中传递原始数据类型的最佳做法
- 25. PHP通过引用传递/值 - 问题
- 26. 在类中通过引用传递变量?在php
- 27. .NET如何通过引用传递类?
- 28. C++类只能通过引用传递
- 29. 传递值或通过引用获取基本数据类型会更好吗?
- 30. 原始类型通过C++和CLI
对象不通过引用传递。对象是引用类型,但除非另行指定,否则它们将作为函数参数传递。 – Joseph 2009-07-08 12:59:10