跨类的PHP类似方法,但不同的成员可变范围?

时间:2017-03-31 02:28:26

标签: php

我有两个相似的类,但成员变量的范围不同。我会把它最小化到

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变量,所以我实际上是在遗漏了一个依赖项。

1 个答案:

答案 0 :(得分:2)

来自manual

  

接口中声明的所有方法都必须是公共的;这是界面的本质。

甚至不可能在接口中声明属性,这不是他们的目的 如果你这样做,你会得到:

 Fatal error: Interfaces may not include member variables

我建议您阅读上面链接的手册页上的热门评论:http://php.net/manual/en/language.oop5.interfaces.php#107364

接口根本不关心方法的实现,它只是一个契约,用于指定实现类应该如何处理面向公众的方法。类用于履行合同的公共或私有方法或属性与接口无关。

通过省略界面中的属性,您不会遗漏依赖关系,而是在加强抽象。