我有两个相似的类,但成员变量的范围不同。我会把它最小化到
class LimitedADAData{
private $member;
public function mapMember($map){
//use $this->member with $map
}
}
class ADAData{
public $member;
public function mapMember($map){
//use $this->member with $map
}
}
特征,接口和抽象类必须声明范围对吗?那么当重用方法不关心变量的范围是什么时,你会怎么做,但是其他类的呢?
例如,这样做......
interface DataMethods{
public $member;
public function mapMember($map);
}
...不适合LimitedADAData,它有一个私有的$ member
但遗漏变量
interface DataMethods{
public function mapMember($map);
}
很糟糕,因为mapMember函数会查找$ member变量,所以我实际上是在遗漏了一个依赖项。
答案 0 :(得分:2)
来自manual:
接口中声明的所有方法都必须是公共的;这是界面的本质。
甚至不可能在接口中声明属性,这不是他们的目的 如果你这样做,你会得到:
Fatal error: Interfaces may not include member variables
我建议您阅读上面链接的手册页上的热门评论:http://php.net/manual/en/language.oop5.interfaces.php#107364
接口根本不关心方法的实现,它只是一个契约,用于指定实现类应该如何处理面向公众的方法。类用于履行合同的公共或私有方法或属性与接口无关。
通过省略界面中的属性,您不会遗漏依赖关系,而是在加强抽象。