交换机/案例可以用于长脚本吗?

时间:2011-08-07 13:56:07

标签: php

我想知道以下是否可以:

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

是否可以找到网址并使用开关/案例来运行基于网址的说明?

例如:

$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;

我很想知道,因为在很多开关/案例中,它似乎经常被用来回应一些东西。

3 个答案:

答案 0 :(得分:4)

从技术上讲,每个case中的长代码都可以正常工作;但它会导致代码难以阅读/维护。

我想一个替代方案可能是通过函数调用替换你的20-30行代码;这样:

  • 您的switch / case结构仍然可读:不会太长,
  • 并且每个案例都有一个功能。

答案 1 :(得分:1)

使用$_GET中的参数并将其与switch()语句一起使用 它比查找URL的外观和决策更好。 只有当您可以使用mod_rewrite来调用这样的网址时才会出现这种情况: /add/banana/add/chocolate

所以最好这样做:

调用:add.php?type = banana

PHP:

$param = $_GET['type'];
switch($param){
case.....
}

并且你有一个很长的代码可以使用,你应该创建一些可以抽象地使用数据的函数

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

答案 2 :(得分:1)

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

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

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