代码之家  ›  专栏  ›  技术社区  ›  Robin Rodricks

PHP中的基元数据类型是否通过引用传递?

  •  1
  • Robin Rodricks  · 技术社区  · 16 年前

    在PHP中,我经常做很多字符串操作。是否可以将代码拆分为多个函数,因为如果按值传递字符串之类的基元类型,则会显著影响性能。

    5 回复  |  直到 12 年前
        1
  •  7
  •   Greg    16 年前

    只有对象通过引用传递。

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

    从这个角度来看,将代码拆分为函数并不能降低速度。 调用函数的开销很小,但是除非您的in-a循环调用了10000个函数,否则这可能不是您需要担心的事情。

        2
  •  2
  •   Knyri    12 年前

    对象通过引用传递。除非您明确使用 pass-by-reference with the & operator .

    也就是说,PHP还使用 copy-on-write 避免不必要的复制。

        3
  •  1
  •   Peter    16 年前

    是的,除非显式定义要通过引用传递的函数(通过使用与号 & 在参数前面)或在参数前面用一个和号调用函数。(后者已弃用)

    this part of the documentation 更多。

    编辑

    另外,在PHP中“对象是通过引用传递”的语句有点简单,尽管在大多数情况下都可以这样认为。这个 chapter of the documentation 解释不同之处。

        4
  •  1
  •   moo    16 年前

    传递引用实际上比传递PHP中的值慢。我找不到这个声明的正确引用;它在PHP手册的“引用”部分的某个地方。

        5
  •  1
  •   Joseph    16 年前

    默认情况下,所有内容都按值传递。如果要通过引用传递某个内容,则必须显式地将其声明为引用传递。

    这里是 php documentation that explicitly states this behavior .

    推荐文章