亲爱的Stackoverflow 之神
假设我有一个MySQL查询,它选择了一个大型数据集:
$query = "SELECT col_1, col_2, ..., col_99 FROM big_table";
我得到一个MySQLi的结果是这样的:
$result = $db->query($query);
但是,我没有在这个范围内处理$result,而是将其传递给一个函数:
my_function($result);
一旦进入my_function(),我就会遍历结果中的每一行并执行以下操作:
function my_function($result) {
while($row = $result->fetch_object()) {
...
}
}
请帮助我理解这种方法对记忆的影响。
换句话说,$result包含什么?将其传递给函数是否存在陷阱?我是否应该考虑通过引用传递$result?就其价值而言,一旦my_function()完成,我就不需要$result了
来自南非的欢呼!
您将不会有任何内存影响。CCD_ 1持有资源。它并不代表全部结果。这只是结果的资源Id。MySQL使用这个来收集结果。
这种方法实际上不涉及内存。PHP通过引用传递对象,因此在将对象传递给函数时使用的内存非常少。
数组的情况并非如此,它们使用了一种名为"写时复制"的技术,这意味着如果在函数中更改数组,则该数组将被克隆。
你总是可以亲眼看到影响。
PHP 5+中的对象是通过引用自动传递的,因此将结果对象传递到函数中不会复制它
然后,您可以在调用函数后取消设置变量。