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
属性。
您可以使用抽象方法通过派生的类强制实现。 The $handler can be declared as a property of an abstract class so every derived class will inherit it.
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();
public function getHandler() ;
在此方法中,该类将返回
$handler
从php 8.4使用
-property钩子!接口定义
interface Jsonabe
{
public Handler $handler {
get;
}
public function toJson();
}
}
使用属性的实施
class FacebookTransformer implements Jsonable
{
protected Handler $handler;
public function __construct()
{
/* Assuming FacebookHandler extends/implements the Handler class */
$this->handler = new FacebookHandler();
}
public function toJson()
{
// ...
}
}
class FacebookTransformer implements Jsonable
{
public Handler $handler {
get {
/* Assuming FacebookHandler extends/implements the Handler class */
return new FacebookHandler();
}
}
public function toJson()
{
// ...
}
}