eval()的替代方法-PHP

时间:2019-10-02 06:08:51

标签: php eval

我正在尝试在PHP中实现URL映射。我有一个json文件,其中存储了网址和在请求该链接时执行的功能。我当时使用的是eval(),但是后来我发现了

  

记住以下引号:

     

如果eval()是答案,那么您几乎肯定会问错   题。 -Rasmus Lerdorf,PHP的BDFL

现在我正在考虑的是其他任何(更好)的方法。

我的json文件看起来像这样。

{
    "bw/":"main()",
    "bw/login":"login()"

}

和我的loadPage函数看起来像这样。

function loadPage($url){ //$url = 'bw/'
    $str = file_get_contents('urls.json');
    $this->link = json_decode($str, true);
    $url = ltrim($url,"/");
    $key = $this->link[$url];
    eval("$key;");
}

编辑: 我在代码中定义了$ this-> link

2 个答案:

答案 0 :(得分:1)

对JSON进行细微调整以允许您动态调用该函数将使其变得更容易,只需删除方括号即可,看起来像...

{
    "bw/":"main",
    "bw/login":"login"

}

然后使用...调用它

function loadPage($url){ //$url = 'bw/'
    $url = ltrim($url,"/");
    $key = $this->link[$url];
    $key();
}

答案 1 :(得分:0)

更好的方法是将eval()更改为:

if (function_exists($key)) { 
   return $key(); 
} 
return default();

,您可能会创建一个“默认”功能,以在不存在该功能时显示错误404或默认页面。