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

PHP跨类使用类似的方法,但成员变量范围不同?,php,Php,我有两个相似的类,但成员变量的作用域不同。我会把它减到最小 class LimitedADAData{ private $member; public function mapMember($map){ //use $this->member with $map } } class ADAData{ public $member; public function mapMember($m

我有两个相似的类,但成员变量的作用域不同。我会把它减到最小

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

来自:

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

甚至不可能在接口中声明属性,这不是它们的用途。
如果您这样做,您将得到:

 Fatal error: Interfaces may not include member variables
我建议阅读上面链接的手册页面上的顶部评论:

接口根本不关心方法的实现,它只是一个契约,指定实现类应该如何处理它们的面向公共的方法。类使用哪些公共或私有方法或属性来实现契约对接口来说并不重要


您没有通过省略接口中的属性来忽略依赖项,而是在加强抽象。

方法的内部实现不是接口的一部分。
mapMember
函数不关心属性是公共的还是私有的,它们的工作方式都是一样的。对,但是接口关心类是将属性实现为公共的还是私有的,即使函数不是。接口只指定类的用户可见的类的方面,即其公共属性和方法。除了接口所需的属性外,还可以有其他属性。接口并没有指定哪些方法使用哪些属性。说得很好。回到问题中的具体示例:给定类中的
mapMember
实现可能会查找
$member
变量,但可能不会:它可能使用具有不同名称的变量;或者在数据库中查找,或者生成一个随机数。它只需要满足接口中指定的契约,其中可能包括参数(强制或在doc块中)、返回类型(可以在php7中强制,如果php5,则在doc块中强制)、抛出的异常(在doc块中)以及可能在可见效果的doc块中的一些未强制描述。