如何确保实现接口的类必须定义属性以及

时间:2018-01-30 14:39:41

标签: php oop interface

我有一个名为Jsonable的接口。

interface Jsonabe{

public function toJson();

}

我确实有两个实现该接口的类。

class facebookTransformer implements Jsonable{

  protected $facebookHandler;

  public function __construct(){

   $this->facebookHandler = new FacebookHandler();
  }
  public function toJson(){ 

  }

}

第二课:

class googleTransformer implements Jsonable{

  protected $googleHandler;

  public function __construct(){

   $this->googleHandler = new GoogleHandler();
  }
  public function toJson(){ 

  }

}

现在通过实现的接口,我知道所有新类都将遵循该接口。我的问题是,我可以以某种方式强制所有实现接口的类来定义属性并通过构造函数初始化它吗?或者,如果我在界面中添加构造函数可以吗?

我想确保所有其他类都具有$handler属性。

2 个答案:

答案 0 :(得分:1)

您可以在界面中添加另一种方法,而不是使用该属性:

public function getHandler() ;

在此方法中,类将返回$handler或创建它(如果尚未完成)。

答案 1 :(得分:1)

您可以使用抽象方法强制派生类实现。 $ handler可以声明为抽象类的属性,因此每个派生类都将继承它。

abstract class Class1{
    protected $handler = "";
    abstract function toJson();
}

class Class2 extends Class1{
    public function toJson(){
        $this->handler = "a value";
        return $this->handler;
    }
}

$foo = new Class2();
echo $foo->toJson();