Svetlin Yankulov
Svetlin Yankulov

Reputation: 73

Can you use a if statement inside a switch

so I'm trying to make my own MVC website, I figured the best way to learn PHP better and tackle the big MVC issue is to start a full project. The thing is, I'm stuck at the router, I can't figure out how best to write it, I think this may be a good way at least for the moment but I'm not sure if it is a ..viable one. I was basically thinking of calling the right controller according to the switch case and then if there is a second url param(I've assumed it would be the id of a article for now) to call a method calling a single article and if there isn't a second param to call a method that calls all articles, but I would like to know if this is a bad way of doing it.

function call($controller, $id='') {

switch($controller) {
    case '':
        break;
    case 'pages':
        $controller = new PagesController();
        break;
    case 'articles':
        require_once('controllers/' . $controller . 'Controller.php');
        require_once('models/articles.php');
        $controller = new ArticlesController();
            if(!$id){
                $controller->{ "blog" }();
            }else{
                $controller->{ "article" }($id);
            }
        break;
    default:
        header("HTTP/1.0 404 Not Found");     
        include('/views/404.php');
        exit;       
        break;
}

}

P.S. For now I'm only working with the articles case, that's why the first case only breaks without doing anything and such. Thanks in advance.

Upvotes: 2

Views: 21494

Answers (2)

Rockers Technology
Rockers Technology

Reputation: 477

If you have only 2 or 3 option then you can use if else otherwise use nested switch. You can use if in switch also switch in another switch.

Upvotes: 1

Steve Byrne
Steve Byrne

Reputation: 1360

Sure can, see the example below (this is proof of concept and not tested).

switch ($controller) {
    case 'pages':
          break
    case 'articles':
          if ($Apples != $Pears)
          {
              $Tomatoes="Red";
          }
    case "52":
    case "109":
    case "110":
        //do nothing and exit from switch
        break;
    default:
        if ($a == $b)
        {
            $c = "cats!";
        }
        break;
 }

Note that you can also use a switch inside a switch, just like nested if statements.

Upvotes: 5

Related Questions