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

  • 本文关键字:成员 范围 方法 相似 PHP 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);
 }

。不适合拥有私人$member的LimitedADAData

但省略变量

interface DataMethods{
    public function mapMember($map);
 }

很糟糕,因为 mapMember 函数会寻找一个$member变量,所以我实际上省略了一个依赖项。

从手册:

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

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

 Fatal error: Interfaces may not include member variables

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

该接口根本不关心方法的实现,它只是一个约定,指定实现类应该如何处理其面向公众的方法。类使用哪些公共或私有方法或属性来完成协定对接口无关紧要。

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

最新更新