这不是关于何时使用“按引用传递”与“按值传递”的理论或一般性问题。这里有几个类型的问题,其中没有一个问题回答了我非常具体的问题:
在PHP中,当将数据库连接资源ID传递给函数(只是一个简单的过程函数,而不是任何类或任何复杂的函数)时,如果我通过引用或值传递是否重要?
连接本身绝对没有。它永远不会改变。所以参考和价值都很好。
我想问的是要弄明白为什么我会通过引用传递它。我有旧的继承代码,代码中的注释表明通过引用传递可以节省内存并提高性能。我想知道这是真的吗?
顺便说一下我使用的是Postgresql连接,而不是MySQL。
谢谢!
答案 0 :(得分:3)
在这种情况下没有区别,因为资源变量本身就是指向外部脚本资源的指针。 只需按值传递即可。
如果执行echo $resourceVar;
,您可以查看PHP资源的用户友好性
将打印如下内容:"Resource id #2"
答案 1 :(得分:2)
对于大多数用途,它根本不重要(通常按值传递),除非您特别想要更改数据库连接。
它与对象的工作方式类似,即使按值传递对象,您仍然可以对其进行更改,因为它是指向实际数据的指针。
所以为了回答这个问题,你没有理由通过参考传递。
答案 2 :(得分:2)
数据库连接是“资源”。它通常只是一个指针,因此无论是通过值还是通过引用传递它都无关紧要。从这个意义上说,资源就像对象一样。
通过引用传递过去曾对内存使用产生重大影响。这就是为什么旧代码包含这么多&运营商。但这不再是必要的。 PHP 5对变量使用了copy-on-write语义,因此在大多数情况下,不需要花费更多的内存来按值传递内容。特别是如果它只是一个像资源一样的指针......但这也适用于其他类型的变量,如字符串和数组。 (尝试按值传递1MB字符串。内存消耗不会增加1MB。)