如果有时只需要,我应该总是回复一些东西吗?

时间:2013-12-12 16:41:11

标签: php oop memory memory-leaks

我有以下场景:一个带有方法的类,该方法在数组中存储键值并返回void 这是方法:

<?php
abstract class MyClass
{
    // ...

    protected function setAttribute($name, $value, $skipCasting = null)
    {
        // ...

        $this->attributes[$name] =& $value;
    }

    // ...
}

现在,我在我的应用程序中多次使用此方法,并且50%的时间我只设置属性,对于其他50%的时间我也需要返回我正在设置的值。

我想知道,就性能而言,如果我总是返回某些东西会有(重大)内存丢失

3 个答案:

答案 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

它显示了如何在长时间运行的脚本中进行一些垃圾收集。