仅加载配置文件一次

时间:2015-12-08 22:43:24

标签: php routes file-get-contents altorouter

我正在使用我的脚本将旧版链接转换为seo友好网址。

的index.php

tree_list[[1]]

AltoRouter.php

require 'AltoRouter.php';
$router = new AltoRouter();
$router->setBasePath('/router');

$urls = [
    'index.php?option=com_index&task=articles&id=1',
    'index.php?option=com_index&task=articles&slug=1-article-title',
    'index.php?option=com_index&task=articles.category&cid=100-category1',
    'index.php?option=com_shop&task=products&slug=100-amazing-product',
];

foreach($urls as $i=>$url) {
    echo $router->getSefUrl($url);
}

我的问题:每当我使用 getSefUrl 方法时,我都会从外部文件加载路由。好吗?或者我可以优化某种代码吗?如果是的话 - 怎么样? 谢谢!

2 个答案:

答案 0 :(得分:1)

你可以通过打破它来避免循环中的多个提取和解码。

在AltoRouter.php中

private $routes = array();

function getComponentRoutes($component)
{
    if(! isset($this->routes[$component])) {
        $path = 'components/'.$component.'/routes/routes.json';
        $this->routes[$component] = json_decode(file_get_contents($path));
    }

    return $this->routes[$component];
}

答案 1 :(得分:0)

您可以使用require_once替换所需的内容,或者更好地使用自动加载:

  

您可以定义一个自动调用的__autoload()函数   如果您正在尝试使用尚未使用的类/接口   定义了。通过调用此函数,脚本引擎被赋予了一个   在PHP失败并错误之前加载类的最后机会。

创建一个文件夹并将所有必需的类放在此文件夹中:

function __autoload($class) {
    require_once "Classes" . $class . '.php';
}