我在MVC中有一个路由器,它可以正常工作,但是我认为它可以缩短两次,因为if (is_array($path))
和else
之后的任何内容都是相同的
当前,我只是在条件is_array
返回true时复制了代码,并使用foreach
遍历$path
。条件is_array
为假时,只需使用else
语句即可。
public function run()
{
// Get string of query
$uri = $this->getURI();
// Check availability of query in routes.php
foreach ($this->routes as $uriPattern => $path) {
// Compare $uriPattern and $uri
if (preg_match("~$uriPattern~", $uri)) {
if (is_array($path)) {
foreach ($path as $p) {
//***logic here***
}
} else {
//***same logic here but for a string***
}
当前我的代码比应该的大,因为其中50%只是其自身的一个副本。您能否建议一种更优雅的方式来拆分数组并通过路径循环?我考虑过递归,但在这种情况下还不知道如何应用。
谢谢
答案 0 :(得分:0)
public function run()
{
$uri = $this->getURI();
foreach ($this->routes as $uriPattern => $path) {
if (preg_match("~$uriPattern~", $uri)) {
if (!is_array($path)) {
$path = [$path];
}
foreach ($path as $p) {
do_logic($p);
}
}
}
}