1
我有一个PHP库,我不想编辑,并通过扩展/重写某些方法来实现我的代码。但我坚持可链接性。例如:从子类返回容器的类型
class MomentPHP extends Moment {
public $uniqueSettings;
public function formatJS(){
return parent::format($this->uniqueSettings);
}
}
class Moment {
public function startOf(){
//some code
return $this;
}
}
我想这样做:
$momentphp = new MomentPHP();
$dateStart = $momentphp->startof('month')->formatJs();
而要做到这一点是压倒在里面MomentPHP子类的所有方法返回自己的方式。
有没有其他简单的方法来做到这一点?像使用_call
什么的?
编辑:找到一个方法来做到这一点:
- 卸下继承,
- 创建父类的一个实例变量,
- 使用
__call
方法类之间切换。
像这样:
class MomentPHP {
private $instance = null;
public $uniqueSettings;
public function __construct(){
$this->instance = new Moment();
}
public function __call($method,$args){
if(in_array($method, get_class_methods($this))){
call_user_func(array($this,$method),$args);
else
call_user_func(array($this->instance,$method),$args);
return $this;
}
public function formatJS(){
return $this->instance->format($this->uniqueSettings);
}
}
class Moment {
public function startOf(){
//some code
return $this;
}
}
有没有什么更好的办法?要做到这一点