我应该只在一个类方法本地保存变量还是将它们声明为类属性?

时间:2012-03-16 15:46:31

标签: php oop

我一直想知道一个类属性是否被实例化并且只在一个类方法中使用它应该是一个类属性还是应该只是该类方法可访问的局部变量?

例如,我应该将仅在一个方法中使用的变量保存为局部变量,如下所示:

class myClass
{
    public function myMethod()
    {
        $_myVariableUsedOnlyOnce = "Hello World";
        echo $_myVariableUsedOnlyOnce;
    }
}

或者我应该将变量设为这样的私有类属性:

class myClass
{
    private $_myVariableUsedOnlyOnce;

    public function myMethod()
    {
        $this->_myVariableUsedOnlyOnce = "Hello World";
        echo $this->_myVariableUsedOnlyOnce;
    }
}

哪种方法“闻起来”?除了需要print_r()整个对象以进行调试之外,使所有方法变量类属性有什么好处?

由于

5 个答案:

答案 0 :(得分:4)

如果你需要它在函数调用之间具有持久性,那么类属性最好,以便它像对象一样移动。您可能还希望将来在其他功能中将其用于其他原因。但是,它确实增加了开销。

一般来说,这个类应该有一些真实的模拟,所以如果你的变量对应于有意义的东西,例如:一个人类有一个$ height,然后它属于一个类属性。否则,如果它只是方法的内部计算的一部分,那么它实际上并不属于该类,例如一个人没有$ shoelaceIterator或其他什么。

我认为令人困惑的对象设计更像是一种气味而不是可能很小的内存开销(尽管这取决于变量的大小)。

答案 1 :(得分:1)

这些局部变量不是对象的属性。

他们没有定义您的对象,因此不应将它们声明为私有成员。

答案 2 :(得分:0)

首先,如果你只使用一次,我会问你是否真的需要变量/属性。至于哪一个“闻起来”,属性在对象的整个生命周期中存储在内存中,而变量仅在内存中,直到方法完成执行。

答案 3 :(得分:0)

如果您不需要方法之外的变量,则它不应该是该类的任何属性。此外,访问局部变量更快。

答案 4 :(得分:0)

在纯粹的设计方法中,我建议您根据属性/属性的模型进行选择。

在纯性能方面,拥有一个静态属性更好,因为不会为每个类的实例分配内存空间。