代码更好地说明了我的要求:
function foo(){
$var = get_huge_amount_of_data();
return $var[0];
}
$s = foo();
// is memory freed here for the $var variable created above?
do_other_stuff(); // need memory here lol
Run Code Online (Sandbox Code Playgroud)
所以我知道$ var在某些时候会被释放,但PHP是否有效地做到了?或者我手动需要取消设置昂贵的变量?
如果我为函数内未声明为全局的变量分配一个值,该变量会在函数终止时自动取消设置还是仅在 PHP 脚本执行完毕时才会取消设置?
我试图确定手动取消设置函数内的临时函数作用域变量是否更明智,或者不担心,因为它们将被 PHP 引擎自动取消设置。
假设我正在处理一个大数据(有多大并不重要)数据数组并将其传递给函数.当然,它将通过值传递,而不是默认情况下通过引用传递.好的,我知道.
所以我的问题是:
如果存储在此数组中的数据足够大,则可以通过将数据存储在对象(例如,stdClass)中或通过使用foo(&$ myData)来获得有价值的性能或内存使用增益,以便通过引用传递数据而不是价值?
我的理解是,当它通过值传递时,PHP将创建一个全新的指针,指向数据的全新内存分配,而传递的值变量存在于函数范围中.在这种情况下,由于这个原因,可能通过引用传递大量数据是值得的吗?我不知道这种理解是否正确......这是问题的一部分.
注意:这是一个假设,所以不要提出任何关于"过早优化","你最好在最小化磁盘I/O然后再担心这个","取决于你有多少RAM","等等."
UPDATE
还有一个问题:假设数据被传递给一个对象构造函数,以便存储为该对象的一个属性,并且它会以一些小的方式被修改,因为它存储在新对象的属性中.那么操作的内存使用方面是否会有显着差异?假设最好以目标格式定义数据以避免因改变数据线而产生的成本,这是正确的吗?