我会一直困惑于是否通过引用函数创建通过/呼叫。如果有人能够解释我何时应该使用它以及一些实际的例子,那将是非常好的。什么时候我们需要通过引用函数创建通过/呼叫
3
A
回答
3
在其他语言中引用(或指针)调用的一个常见原因是为了节省空间 - 但PHP足够聪明,可以实现写入时复制,这些参数被声明为按值传递(副本) 。还有一些隐藏的语义怪异 - 尽管PHP5引入了总是通过引用传递对象的做法,但数组值始终作为引用存储,call_user_func()始终通过值调用 - 从不通过引用(因为它本身是一个函数 - 不是构造)。
但这是对原始问题的补充。
一般而言,它总是将其代码声明为传值(复制),除非您在调用的功能返回后显式地要求该值不同。原因是您应该知道被调用的功能如何更改您当前正在编写的代码的状态。这些概念通常被称为孤立和关注的分离。
2
0
在php4中,它被用于大型变量。如果你在一个函数中传递了一个数组,那么该数组就被复制用于该函数中,并使用大量的内存和cpu。解决方案是这样的:
function foo(&$arr)
{
echo $arr['value'];
}
$arr = new array();
foo($arr);
这样你只传递参考,链接到数组并保存内存和cpu。由于php5的每个对象和数组(不知道像int这样的标量)是否通过内部引用传递,所以不需要自己做任何事情。
0
这是最好的,当你的函数总是返回传递给它同一个变量
$var = modify($var); function modify($var) { return $var.'ret'; }
如果你总是会返回传递变量的变量的修改版本,使用的参考是伟大的。
另外,当处理大的变量,特别是数组时,在可行的情况下通过引用是很好的。这有助于节省内存。
通常,我在处理数组时通过引用传递,因为我通常将修改后的数组返回到原始数组。
相关问题
- 1. 呼叫时通过按引用
- 2. JS创建从通过AJAX通过呼叫
- 3. 呼叫通过“串”
- 4. 通过引用与QVector呼叫
- 5. Mongodb:我们什么时候需要购物车过期?
- 6. 需要创建通过javascript
- 7. 我们什么时候需要一个默认构造函数?
- 8. 什么时候使用Server.Transfer通过PostBackURL?
- 9. 我要创建通过CSS
- 10. Twilio Listening In - 通过修改实时呼叫创建会议
- 11. 呼叫通过反射
- 12. JSP呼叫通过HREF
- 13. 呼叫通过接口
- 14. 呼叫通过反射
- 15. 为什么我们需要在ng-click中通过“$ event”?
- 16. 不推荐使用通过引用的呼叫时间?
- 17. 什么时候iOS构建通过crashlytics过期分发?
- 18. 我们什么时候需要“需要'rubygems'”?
- 19. 通过函数创建unique_ptr
- 20. 指针参数需要通过引用才能通过
- 21. 什么时候通过ref关键字
- 22. 我们什么时候需要一个.template构建
- 23. .NET容器 - 什么时候是成员通过引用,按值?
- 24. 什么时候在PHP中通过引用
- 25. 什么时候有人想要通过GCD使用NSThreads?
- 26. 我们什么时候创建位图索引?
- 27. 呼叫是通过使用附加的Drupal JS的函数
- 28. 我什么时候需要使用“android:id”?
- 29. 我什么时候需要使用@WebServiceRef?
- 30. Application.DoEvents,什么时候需要,什么时候不需要?
+ 1为写复制行,这是关于传递数据和内存中发生的事情的一个很好的观点。 – RobertPitt 2011-03-23 11:36:13