2013-04-10 63 views
1

這裏是場景:區分基於命名約定的類中的方法?

我有一個沒有預定數量的方法的類。一些將是function actionName和其他將被稱爲function filterName其中"filter""action"將定義他們是什麼類型的方法和"Name"可以是任何東西。

在我__construct()我想:

$methods = get_class_methods($this); 

foreach ($methods as $method) { 

    if ($method == 'action') 
    $this->DoSomething($this->{$method}()); 

    if ($method == 'filter') 
    $this->DoSomethingElse($this->{$method}()); 

} 

我怎樣才能做到這一點不使用任何類型的字符串或者reg表達式中?

我也願意使用get_class_methods()的替代品。但請記住,我永遠不會知道存在多少個"action""filter"方法。

回答

1
if (substr($method,0,6) == "action") { } 

if (substr($method,0,6) == "filter") { } 

我只是檢查關鍵字的功能名稱的前六個字符鏈。被警告 - 太多的關鍵字會殺死這個表現。

+0

我可能會讀這個錯誤,但我不想使用任何類型的搜索的主要原因,因爲如果你看[基準](http://net-beta.net/ubench/index.php?t = strpos5)它給人的印象是隻有80個循環需要1秒左右。對我而言,這聽起來像是一團糟......在我的例子中,我很可能有超過100種方法。這是我無法預測或知道的。 – 2013-04-10 19:24:22

+0

在「其他方法」方面,我很少看到一種方法能夠在沒有實際使用任何字符串比較的情況下辨別字符串。有沒有方便的標誌,你可以使用,所以唯一剩下的是一個查詢表:-( – 2013-04-10 19:32:16

+0

基本上我想做'功能{類型}名稱(){}',然後'if(functionType($ fName)= ='action'){...}' – 2013-04-11 14:20:12