PHP中的原始数据类型是通过引用传递的吗?

时间:2009-07-08 12:39:01

标签: php performance byref

在PHP中,我经常进行大量的字符串操作。将我的代码拆分成多个函数是否可以,因为如果像字符串这样的原始类型按值传递,那么我将显着影响性能。

5 个答案:

答案 0 :(得分:7)

只有对象通过引用传递。

这并不意味着你可以通过更改为引用来提高性能 - PHP使用copy-on-write,因此只有在修改变量时才会进行复制。

将代码拆分为函数不会从这个角度减慢速度。 调用函数的开销很小,但除非你在循环中调用10,000个函数,否则你可能不需要担心。

答案 1 :(得分:2)

通过引用传递对象。除非您明确使用pass-by-reference with the & operator,否则其他所有内容都会按值传递。

话虽如此,PHP还使用copy-on-write来避免不必要的复制。

答案 2 :(得分:1)

是的,原语按值传递,除非您明确定义要通过引用传递的函数(通过在参数前面使用&符号&)或在参数前面调用带符号的函数。 (后者已被弃用)

有关详情,请参阅this part of the documentation

修改

此外,PHP中“通过引用传递对象”的语句有点简化,尽管通常可以将其视为大多数用途。这个chapter of the documentation解释了这些差异。

答案 3 :(得分:1)

默认情况下,所有内容都按值传递。如果你想通过引用传递一些东西,你必须明确地说明它。

这是php documentation that explicitly states this behavior

答案 4 :(得分:1)

通过引用传递实际上比在PHP中传递值慢。我找不到这个说法的正确引用;它位于PHP手册的“参考”部分。