假设我正在构建一个类(用于通用目的),并且我有两个处理公共变量的方法。
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
(边数)是形状性质的固有部分,因此在物体的整个生命周期中作为物体状态的一部分是合适的。这与在同一个类中的方法之间传递参数的便利性没有任何关系。