属性VS引用:在类方法之间共享一个变量


Property VS reference: share a variable between class methods

假设我正在构建一个类(用于通用目的),并且我有两个处理公共变量的方法。

class renderElement
{
    public function process()
    {
        $output = array();
        $data = $this->supportMethod($output);
        // do stuff with $output
    }
    public function supportMethod(&$processed_output)
    {
        // do stuff with $processed_output
    }
}

我想在两个方法中使用相同的变量;比如$output

我很想知道选择最终依赖类属性(如以下)或何时可以(或更好)传递变量作为引用背后的理论。

class renderElement
{
    private $output = array();
    public function process()
    {
        $data = $this->supportMethod();
        // do stuff with $this->output
    }
    public function supportMethod()
    {
        // do stuff with $this->output
    }
}

优势呢?缺点呢?设计建议吗?关于这类设计选择的建议讲座?

[EDIT]

我想补充的是,变量/属性显然应该具有作为对象属性的意义。我不是在谈论仅仅支持数据处理的变量。

一个对象基本上由两部分组成:行为和状态。

类的方法定义了对象的行为。

类的属性定义了对象的状态。

在您的第一个示例中,$output不是对象状态的一部分,因此它不会在对象的整个生命周期中持续存在。

在第二个示例中,$output将在对象的整个生命周期中持续存在,因为它是对象状态的一部分。

举个例子…

class Shape 
{    
    protected $sides;
    public function getNumberOfSides() 
    {
        return $this->sides;
    }
}
class Triangle extends Shape 
{
    public function __construct() 
    {
        $this->sides = 3;
    }
}
class Square extends Shape 
{    
    public function __construct() 
    {
        $this->sides = 4;
    }
}
$shape = new Square;
echo $shape->getNumberOfSides(); // Returns 4
$shape = new Triangle;
echo $shape->getNumberOfSides(); // Returns 3

$sides(边数)是形状性质的固有部分,因此在物体的整个生命周期中作为物体状态的一部分是合适的。这与在同一个类中的方法之间传递参数的便利性没有任何关系。