传递数据作为值而不是PHP中的参考时,会有任何可测量的性能差异吗?

似乎很少有人意识到该变量可以作为值而不是引用传递。这是否常识?

有帮助吗?

解决方案

如果您要通过值传递一个大变量(这是PHP5+中对象除外的所有内容的默认变量),那么是的,您可以进行性能点击。

例如,如果用户提交大量的帖子数据,则如果要将该数据正常传递给功能(又称为值),则必须复制整个数组,这将影响性能。但是,除非您在一个非常大的网站上,否则您可能不会注意到这一命中。

PHP中可以通过参考传递,但肯定不是默认值(除非是对象):您需要添加AN&之前的变量以通过参考使其通过,否则仅按值(并复制它)。从PHP5开始,对象会自动传递,但是在PHP5之前,您需要通过参考明确传递(即添加&)

其他提示

从我的理解来看,PHP 5通过值传递了简单的数据类型和数组,但是当涉及对象时,它通过参考传递。看来这是您应该意识到的行为 - 我认为数组是按值传递的,因此,如果您不需要制作副本,则大型行为可能会遭受性能的命中。

我已经看到很多论点反对通过参考明确地传递,并让PHP做它的事情。

另外,如果您想按值传递对象,那么理想情况下应该克隆它。

如果有性能差异,则可以忽略不计。除非您 知道 通过参考的传递会导致性能(除了我无法想象这种情况的情况)。

附带说明,人们通常建议不要通过参考来传递论点,因为它鼓励不良设计,就像使用全球变量一样。

不过,我不确定您是最后一部分的意思。 php默认情况下按值传递参数。

如果您使用最新版本的PHP,则始终通过引用传递对象。在另一种类型时,主要问题是字符串 /数组。对于那些取决于。 PHP的字符串实现使得,如果您不修改字符串,您将传递给函数的参数(仅读取 /扫描),它将永远不会被复制。该实现称为“写入抄写”。我不确定数组,我需要一些测试来回答这个问题。

除非您修改通过值字符串参数传递的传递,否则通过参考将没有区别。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top