2010-01-02 95 views
1

我正在做一個路由器,以及路由,我的學習的一部分,並希望看看我的方法工作。然而最近這一直困擾着我,現在看到我將數組添加到一個主要的「經理」中。在PHP中的URL路由

所以我得到了(僞樣本),以這種方式

<?php 
$paths = array(); 

$paths[] = new routes_object('PATH', 
      array(
       'controller'=> 'controllerName', 
       'action' => 'actionName')); 

$router = new router_manager()->add($paths); 

將所有路線後,意味着它會超過10左右。然後爲了查看它們是否匹配,我必須迭代它們並檢查match()函數以啓動提取過程來獲取變量。

採取這種方法可以嗎?有一個數組中的對象集合並迭代?

回答

2

添加完所有路線後,意味着我噸會超過10個左右。然後爲了查看它們是否匹配,我必須迭代它們並檢查match()函數以啓動提取過程來獲取變量。

這讓我覺得你關心的是性能。別。

這是做面向對象代碼的完美方法。包含10個項目的循環不應該明顯影響您的應用程序性能。一個對象是而不是面向對象代碼中的昂貴元素。多多益善。

+0

那麼,我當然不會指望它超過100,那麼,如果它那麼意味着它對我來說很好:) 是的,我主要擔心的是性能,它仍然是我早。 – allenskd 2010-01-03 00:17:12

2

我在我的路線中使用正則表達式。

於是我打通途徑試圖找到一個匹配:)

$acs_routerTable = array(
    '/^$/' => 'index_Controller', //default controller 
    '/^(authteste|modelteste|formsteste|scafftest|test)/' => 'index_Controller/$1', 
); 

的陣列和路由器類的查詢字符串,只是循環我有這樣的:

private function getRoutes($givenroute) {   
    require($this->configData->pathroutes);     

    $newroute = null; 

    foreach ($acs_routerTable as $pattern => $value) { 
     if (preg_match($pattern,$givenroute,$match)) {  
      $newroute = preg_replace($pattern,$value,$givenroute);     
      return $newroute;  
     }  
    } 
    return $givenroute; 
} 

,你可以看看它是否匹配一條路線,它將返回該新路線,如果不是,它將只返回給定的路線:)