【发布时间】:2013-03-11 06:15:52
【问题描述】:
已经非常彻底地解释了,如果它们是技术原因,您只能在 PHP 中通过引用传递,因为 Copy-On-Write 基本上使性能等效。据我了解,如果它从未改变过,它永远不会复制对象。
但是如果函数确实改变了变量,但你的代码再也没有使用它/不使用任何被改变的部分怎么办?是否更改原始代码对代码无关紧要。是的,PHP 优化器可能会考虑到这种情况,但我没有理由相信它会这样做。
传递单个引用肯定会比复制一个巨大的数组或对象快得多。
那么这是通过引用传递的好情况吗?
例如,假设您传入了一个 DomCrawler(只不过是一个大的 [html 格式] 字符串,但在这种特定情况下它是通过引用隐式传递的)。爬行一点并提取一些信息。在许多情况下,您不需要将 Crawler 重置为其原始位置,因为您根本不会再次使用它。 另外,想象一下我们确实使用了 DOMCrawler,我们从中读取 URI。该函数没有改变这一点,所以通过引用或值传递仍然是等价的,但是通过引用传递不会明显更优化吗?我认为这种情况对于任何优化者来说都很难发现。
【问题讨论】:
-
那么问题是什么?
-
你的问题是?你不会怀疑那些设计 PHP 的人吧?因为那太冒昧了;)
-
我永远不会明白为什么这么讨厌/不理解隐含的问题。更新的问题。
-
“但是如果函数确实改变了变量,但你的代码再也不会使用它/不使用任何被改变的部分”这没有意义。如果您不打算使用已更改的变量,那么为什么首先要在代码中使用它?
-
您的假设情况(传递
DomCrawler)无关紧要,因为在PHP 中对象总是通过引用隐式传递(实际上它并不完全是引用,但足够接近)。传递的对象将永远被复制,除非你明确地clone它。
标签: php pass-by-reference copy-on-write