Php switch/case可以与长脚本一起使用吗?

Php switch/case可以与长脚本一起使用吗?,php,Php,我想知道以下情况是否可以: 所以我有一堆不同类型的记录,我想添加,每种类型的表格都是不同的。例如,Apple.php、Banana.php、Chocolate.php。我不想为每个文件创建一个不同的处理php文件,我希望所有的处理指令都放在一个文件add.php上,而不是addApple.php、addBanana.php等 找到url并使用开关/案例根据url运行说明可以吗 例如: $uri = $_SERVER['HTTP_REFERER']; switch (true) { case (s

我想知道以下情况是否可以:

所以我有一堆不同类型的记录,我想添加,每种类型的表格都是不同的。例如,Apple.php、Banana.php、Chocolate.php。我不想为每个文件创建一个不同的处理php文件,我希望所有的处理指令都放在一个文件add.php上,而不是addApple.php、addBanana.php等

找到url并使用开关/案例根据url运行说明可以吗

例如:

$uri = $_SERVER['HTTP_REFERER'];
switch (true) {
case (strstr($uri,'apple')):
  //20 lines of code to insert records
break;
case (strstr($uri,'banana')):
 //30 lines of code to insert records
break;

我很好奇,因为在很多switch/case示例中,它似乎经常被用来回应某些东西

从技术上讲,每个
案例中的长代码部分将起作用;但这会导致代码难以阅读/维护

我想另一种方法是用函数调用替换20-30行代码;这样:

  • 您将拥有一个仍然可读的
    开关
    /
    大小写结构:不太长
  • 每种情况都有一个函数

从技术上讲,每个
案例中的长代码部分将起作用;但这会导致代码难以阅读/维护

我想另一种方法是用函数调用替换20-30行代码;这样:

  • 您将拥有一个仍然可读的
    开关
    /
    大小写结构:不太长
  • 每种情况都有一个函数

$中使用参数
并将其与
开关()语句一起使用
这比查找URL的外观并做出决定要好。
只有当您可以使用
mod_rewrite
这样调用URL时,才会出现这种情况:
/add/banana
/add/chocolate

所以最好这样做:

调用:add.php?type=banana

php:

关于你有一个很长的代码要处理的问题,你应该做一些抽象地处理数据的函数,比如

function add_type($type = "defaulttype", $data = null){
    // do with data whatever you want, like creating save-arrays and querying db layer
}

使用
$\u GET
中的参数,并将其与
switch()
语句一起使用 这比查找URL的外观并做出决定要好。 只有当您可以使用
mod_rewrite
这样调用URL时,才会出现这种情况:
/add/banana
/add/chocolate

所以最好这样做:

调用:add.php?type=banana

php:

关于你有一个很长的代码要处理的问题,你应该做一些抽象地处理数据的函数,比如

function add_type($type = "defaulttype", $data = null){
    // do with data whatever you want, like creating save-arrays and querying db layer
}

它可以工作,但我认为最好使用单独的函数来保存记录

$uri = $_SERVER['HTTP_REFERER'];
switch (true) {
  case (strstr($uri,'apple')):
    saveApple();
    break;
  case (strstr($uri,'banana')):
    saveBanana();
    break;
}

这将使switch语句更短(更可读)。另外,不同的功能还增加了可读性和可维护性。

它可以工作,但我认为最好使用不同的功能来保存记录

$uri = $_SERVER['HTTP_REFERER'];
switch (true) {
  case (strstr($uri,'apple')):
    saveApple();
    break;
  case (strstr($uri,'banana')):
    saveBanana();
    break;
}

这将使switch语句更短(更可读)。另外,不同的函数增加了可读性和可维护性。

请帮助您未来的自己和其他可能认为此代码有用的人。使用
if…elseif…elseif…else
构造而不是
switch(true)
@Chris Carson:请解释为什么这是一个优势。@hakre:在这种情况下,它更简洁、可读性更强、更不容易出错。简洁:每个
if
elseif
else
块占用的行数与
案例相同…break
块。您可以去掉
开关
行和结束开关的
}
。可读性:每个
if
条件显示在
if
elseif
旁边的最右边,而不是将x行数返回到
开关
参数。不易出错:快速示例
true
可以解释为其他类型——在本例中,我认为是字符串“1”。我不认为
switch
与严格相等相比。@Chris Carson:concision不一定意味着更可读,尤其是当我看到有人开始计算行数以获得微小的差异时。我可以理解你的目的,但我只是感兴趣的是,为什么到目前为止,在没有完整代码的情况下进行这样的分析。在这个问题的背景下,它可以被认为是噪音。我认为你是出于好意才这么做的。感谢您的澄清。请帮助您未来的自己和其他可能认为此代码有用的人。使用
if…elseif…elseif…else
构造而不是
switch(true)
@Chris Carson:请解释为什么这是一个优势。@hakre:在这种情况下,它更简洁、可读性更强、更不容易出错。简洁:每个
if
elseif
else
块占用的行数与
案例相同…break
块。您可以去掉
开关
行和结束开关的
}
。可读性:每个
if
条件显示在
if
elseif
旁边的最右边,而不是将x行数返回到
开关
参数。不易出错:快速示例
true
可以解释为其他类型——在本例中,我认为是字符串“1”。我不认为
switch
与严格相等相比。@Chris Carson:concision不一定意味着更可读,尤其是当我看到有人开始计算行数以获得微小的差异时。我可以理解你的目的,但我只是感兴趣的是,为什么到目前为止,在没有完整代码的情况下进行这样的分析。在这个问题的背景下,它可以被认为是噪音。我认为你是出于好意才这么做的。谢谢你的澄清。