问题是数据库连接是否应该通过引用或值传递?
对我来说,我特别质疑一个PHP到MysqL的连接,但我认为它适用于所有的数据库.
我听说在PHP中将变量传递给函数或对象时,它被复制到内存中,因此立即使用两倍的内存.我也听说,只有对值进行了更改才被复制(例如从数组中添加/删除的键).
在数据库连接中,我会认为在函数中正在改变,因为查询可以改变最后一个插入的id或num行的内容. (我想这是另一个问题:像连接中存储的num行和insert id这样的东西,还是将实际的调用返回到数据库?)
那么,如果连接通过引用或值来传递,内存或速度是否重要? PHP 4 vs 5有差异吗?
// $connection is resource function DoSomething1(&$connection) { ... } function DoSomething2($connection) { ... }
PHP资源是一种已经是引用的特殊类型.通过值或通过引用明确地传递它将不会有所不同(即它仍然是参考).您可以在PHP4下自行检查:
function get_connection() { $test = MysqL_connect('localhost','user','password'); MysqL_select_db('db'); return $test; } $conn1 = get_connection(); $conn2 = get_connection(); // "copied" resource under PHP4 $query = "INSERT INTO test_table (id,field) VALUES ('','test')"; MysqL_query($query,$conn1); print MysqL_insert_id($conn1)."<br />"; // prints 1 MysqL_query($query,$conn2); print MysqL_insert_id($conn2)."<br />"; // prints 2 print MysqL_insert_id($conn1); // prints 2,would print 1 if this was not a reference