我正在尝试在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
答案 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或默认页面。