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;
}
}
有沒有什麼更好的辦法?要做到這一點