2010-01-02 55 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; 
} 

,你可以看看它是否匹配一条路线,它将返回该新路线,如果不是,它将只返回给定的路线:)