编程语言
首页 > 编程语言> > php – 如何替换嵌套的switch语句

php – 如何替换嵌套的switch语句

作者:互联网

我被要求写一个小PHP脚本,从一些下拉框中获取一些POSTed输入,这些输入提供了一些可选标准,最后,吐出一个或多个包含唯一代码的字符串变量.

变量名称的形式为$thingPlaceType,每个变量名称都是唯一的.下拉框允许选择:

>一个“东西”或所有“东西”在一起
>一个“地方”或所有“地方”在一起
>一个“类型”或所有“类型”在一起

我无法弄清楚如何选择这些代码而不依赖于我所做的嵌套switch语句

switch($_POST['thing'])
{
  case "thing1":
     switch($_POST['place'])
     {
       case "place1":
          switch($_POST['type'])
          {
            case "type1":
               $output = $thing1Place1Type1;
            case "type2":
               $output = $thing1Place1Type2;
            case "alltypes":
               $output = $thing1Place1Type1.$thing1Place1Type2.$thing1PlaceType3;
           }
        case "place2":
        ...
        case "allplaces":
        ...
      }
  case "thing2":
     switch($_POST['place'])
     {
       case "place1":
          switch($_POST['type'])
          {
            case "type1":
               $output = $thing1Place1Type1;
            ...
      ...
  ...
}

似乎代码变成了Arrow Anti-Pattern.我想我可能会使用多维数组做一些事情,或者可能是一个单独的数组,我将值与键匹配.但是我觉得那紧抓着稻草,必须有一些我不知道的东西.是时候将字符串转换为具有属性的正确对象了吗?

解决方法:

如果你想将它们转换为对象..你可以创建它.

  class Object {
        private $thing;
        private $place;
        private $type;

        public function __construct() {
            $this->thing = $_POST['thing'];
            $this->place = $_POST['place'];
            $this->type  = $_POST['type'];

            $this->processThing($this->thing, $this->place, $this->type);
        }

        public function processThing($thing = false, $place = false, $type = false) {
               //noW that you have all the properties you just need just process it
        }

    }

    if(isset($_POST['thing']) && isset($_POST['place']) && isset($_POST['type'])) {
        $object = new Object();
    }

标签:php,switch-statement,nested,anti-patterns
来源: https://codeday.me/bug/20190620/1249602.html