我有以下场景:一个带有方法的类,该方法在数组中存储键值并返回void 这是方法:
<?php
abstract class MyClass
{
// ...
protected function setAttribute($name, $value, $skipCasting = null)
{
// ...
$this->attributes[$name] =& $value;
}
// ...
}
现在,我在我的应用程序中多次使用此方法,并且50%的时间我只设置属性,对于其他50%的时间我也需要返回我正在设置的值。
我想知道,就性能而言,如果我总是返回某些东西会有(重大)内存丢失?
答案 0 :(得分:1)
如果在很大程度上取决于解释器,但在大多数语言中,函数的返回值只是推送到堆栈的值,然后由调用者弹出。
在PHP这样的高级语言中,有自己的内存管理器和垃圾收集器,担心这些事情有点太多,但如果你真的担心它,那么将值存储在变量中,调用函数并在之后使用它可能更安全。
答案 1 :(得分:1)
现在,我在我的应用程序中多次使用此方法,并且50%的时间我只设置属性,对于其他50%的时间我也需要返回我正在设置的值。
在这种情况下,您可能需要两种不同的方法:setter和getter,例如: -
abstract class MyClass
{
// ...
protected function setAttribute($name, $value, $skipCasting = null)
{
// ...
$this->attributes[$name] =& $value;
}
public function getAttribute($name)
{
return $this->attributes[$name];
}
}
这样您可以根据需要调用适用的功能。
我想知道,就性能而言,如果我总是返回某些内容会有(显着的)内存丢失吗?
不,无需担心,如果您不需要使用它们,您可以非常安全地忽略任何方法或函数的返回值。
答案 2 :(得分:0)
您主要关心内存分配/性能吗? PHP自己进行垃圾收集,通常作为单个线性进程执行,因此不会考虑内存分配等。
对内存分配不感兴趣不是最好的做法,但在单线程,单一进程中,它不如在多线程.net服务中那么重要。
编辑:如果您非常关心内存管理并且此脚本执行了很长时间,请查看
http://www.php.net/manual/en/features.gc.php
它显示了如何在长时间运行的脚本中进行一些垃圾收集。