我偶尔会发现自己在类中有几个方法都需要相同的数据(例如,查询对象)。通常,会有一个带有通用名称的公共方法,例如parseReport()
,它会将工作委托给几个私有方法,最后返回成品:
public function parseReport( queryObject ) {
queryObject = correctDatesAndTimes( queryObject );
queryObject = sortByCusomter( queryObject );
queryObject = buildHierarchy( queryObject );
return queryObject;
}
private function correctDatesAndTimes( queryObject ) {
// do some stuff
return queryObject;
}
private function sortByCusomter( queryObject ) {
// do some stuff
return queryObject;
}
private function buildHierarchy( queryObject ) {
// do some stuff
return queryObject;
}
所以我的问题是,如果我的queryObject
是一个类级别的属性,我的所有方法都会引用它而不是每次调用它时都将它作为参数传递给它?
答案 0 :(得分:2)
在这种情况下,queryObject不应该是类属性。如果你看一下它,你实际上有一个很大的功能,分成几个较小的功能。如果它是一个大函数,你就不会创建它的类属性。
当数据实际上是类的一部分时,数据属于类属性。记住这一点 类定义是数据和行为的封装。
答案 1 :(得分:1)
在您的示例中,您需要将查询对象作为参数传递,因为它将在私有函数内更改。
如果你进入多线程,那么将它放入私人财产会让你头疼。