一般信息獲取參數傳遞給__call實例方法(新Reflecction()?)
- 我有了一個實例的類。
- 此實例具有__call magicc方法定義
- 魔術方法__call()定義實例將響應的請求方法。
- 使用的php版本是5.5。
我想實現
- 的魔術方法__call什麼()定義了請求方法的實例將作出迴應。
- $ request [0]是響應的正則表達式,而$ request [1]是閉包。
- 我想定義一個前綴實例方法。
- 前綴方法的第一個參數是前綴爲$ request [0]的字符串。
- 第二個參數是一個使用__call()的實例方法數組。
魔術__call()方法,如果該實例:
public function __call($method, $request) {
$this->_links[strtoupper($method)] [$this->_baseUrl . $request[0]] = $request[1];
return $this;
}
前綴方法,因爲它是現在;
public function prefix($prefix, $callbackmethods = array()) {
foreach ($callbackmethods as $closure) {
$reflection = new ReflectionFunction($closure);
}
return $this;
}
我試圖實現的代碼結構的示例。
# Normal method call to __call
$link->get('/', function(){
});
# Prefic the regex of multiple method calls to __call
$link->prefix('/admin', [
$link->get('user/(\d+)', function(){
}),
$link->post('user/(\d+)', function(){
}),
]);
我曾嘗試
- 在堆棧溢出問題,看了一下,發現PHP的反射類(Deducing PHP Closure parameters)
- 發現我試圖測試之類的各種組合之後。我所有的嘗試都以錯誤的輸出結束。
- PHP手冊頁我一直在研究和使用:http://www.php.net/manual/en/book.reflection.php
我想要實現的是定義一個公共職能前綴($前綴,$ callbackmethods =陣列())。這樣用戶可以很容易地在正則表達式前加一個字符串來匹配。
反射類是正確的方式嗎? 我在找錯誤的東西嗎? 這可以用Php來實現。 還有其他選擇嗎? 任何人都可以告訴我如何正確使用它,如果反射類是正確的方式?
這是一個學習項目,所以請不要建議使用現有的路由類。
更新
我有以下code.After不同的解決問題的代碼進行過濾的__call()方法中完成的。請參閱下面提供的答案以獲得更優雅的解決方案。
/**
*
* @param type $prefix
* @param type $requestMethod
* @return \Link
*/
public function prefix($prefix, $requestMethod = false) {
$this->_applyPrefix = true;
if ($requestMethod != false) {
$this->_prefixMethod = strtoupper($requestMethod);
}
$this->_prefix = $prefix;
return $this;
}
/**
*
* @return \Link
*/
public function end() {
$this->_applyPrefix = false;
$this->_prefixMethod = false;
$this->_prefix = false;
return $this;
}
謝謝你的回答。這對我很有幫助!我將學習Silex源代碼以瞭解它們如何處理事情。我一直在研究SPL。來自Ruby背景的所有教育都非常具有教育意義。我會很快獎勵賞金。 – Dany
我已經爲我的問題添加了另一個解決方案。對於這個研究項目,我希望儘可能簡單,不要超出我的知識範圍。你的回答是非常感謝,並將與獎金研究和獎勵。 – Dany