[編輯]更新標題更準確地反映問題呼叫孩子clases' __call方法,如果它存在,並拋出一個異常,如果不
我試圖解決的問題是這樣的:我需要知道如果通過parent::
調用某個方法,而我可以使用debug_backtrace
,則似乎必須有更好的方法來執行此操作。
我一直在尋找遲到的靜態綁定,但也許我不明白它足以揣測一個解決方案。
有問題的方法是__call
所以我不能簡單地傳入一個額外的參數,因爲它的錯誤大概是兩個或更多。
試圖解決這個問題的原因是,父類有__call
,但孩子可能有也可能沒有_call
。如果孩子沒有,並且父母不派遣電話,那麼我想拋出異常或錯誤。如果孩子確實有方法,那麼我會返回false
(不,我們沒有處理這個),並讓孩子_call
方法繼續。
到目前爲止,我唯一的工作解決方案是讓子項調用parent::__call
包裝在try/catch塊中,並且如果它沒有路由請求,則父項會默認引發異常。
即。
class Parent {
public function __call($method, $params) {
if(preg_match($this->valid, $method) {
$this->do_stuff();
// if child has a call method, it would skip on true
return true;
}
elseif(** CHILD HAS CALL METHOD **) {
// this would let the child's _call method kick in
return false;
}
else {
throw new MethodDoesNotExistException($method);
}
}
}
class Child extends Parent {
public function __call($method, $params) {
if(! parent::__call($method, $params)) {
do_stuff_here();
}
}
}
雖然拋出一個異常,如果家長不處理方法的工作,我只是想看看有沒有更好的解決方案,如使用流量控制研究例外似乎並不完全正確。但是也沒有使用堆棧跟蹤來找出調用者。
那是什麼你不知道何時使用後期狀態綁定? – arkascha