這裏的前提是:動態函數參數和使用__call
我有很多課,我需要之前,從任何一個類被稱爲任何方法執行一個動作,我的解決辦法是讓所有的類擴展這將定義哪些看起來像一個()函數調用父類:
public function call($method){
//do the something I need to do before method calls
$params = func_get_args();
//remove the $method param from the $params array
unset($params[0]);
return $this->__call($method,$params);
}
然後只需撥打呼叫方法,並指定我想叫實際的方法,這樣的方法將被調用,但裏面的調用方法(該類從我的父類繼承)我可以執行我需要在指定的方法獲得之前執行的操作調用。
這需要能夠支持論點,可能是數組或字符串,所以任何涉及爆參數數組是不行的(因爲這會承擔所有的參數都是字符串)。
我不知道如果我有什麼上面是有道理的,我想檢查,看看如果我要對這個錯誤的方式或不。
任何想法/想法將不勝感激。
謝謝! PS:我應該注意,我對上述情況的描述聽起來像子類擴展父類的原因僅僅是爲了這個目的,實際上還有更多的原因(我的父類擴展了Zend_Db_Table_Abstract和我的數據庫模型擴展父項)。
是啊,我意識到以後有的用__call篡改,它的設計沒有在我試圖用它的方式來使用。我想我的實際問題是能夠傳遞一個混合值的數組(一些數組,一些字符串等)作爲獨立的參數到被調用的方法。 – machinemessiah 2010-11-04 03:10:25
什麼會阻止你傳遞一個混合值數組作爲參數?這不就是'call_user_func'的用途嗎? – theazureshadow 2010-11-04 03:25:59
不是call_user_func,而是call_user_func_array,前者只是將您的參數數組作爲單個參數(數組),後者解決了我的問題,感謝您向正確的方向推進! – machinemessiah 2010-11-04 03:28:29