让我们说我正在构建一个类(用于通用目的),我有两种方法可以处理常见变量。
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
}
}
优点?缺点是什么?设计建议? 关于这种设计选择的建议讲座?
[编辑]
我想补充一点,变量/ property显然应该作为对象属性。我不是在谈论仅支持数据处理的变量。
答案 0 :(得分:3)
一个对象从根本上包括两个方面,即行为和状态。
您的类的方法定义对象的行为。
您的类的属性定义对象的状态。
在您的第一个示例中,$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
(边数)是形状本质的固有部分,因此在物体的整个生命周期中它成为物体状态的一部分是合适的。这与在同一类中的方法之间传递参数的便利性没有任何关系。