0

I'm just wondering if I should use 'Switch' or 'If...else if' in php. (Sample code blow). I've had a google search, but the articles I've read have all been a little old. I also wondered if it's sensible to do what I'm doing in a Switch statement.

switch ( $name ) {
    case 'name1': 
        $data['pageName'] = 'name1';
        $data['pageTitle'] = 'Name 1';
        $this->view('name1/index', $data);
        break;
     case 'name2': 
        $data['pageName'] = 'name2';
        $data['pageTitle'] = 'Name 2';
        $this->view('name2/index', $data);
        break;
     case 'name3': 
        $data['pageName'] = 'name3';
        $data['pageTitle'] = 'Name 3';
        $this->view('name3/index', $data);
        break;
     case 'name4': 
        $data['pageName'] = 'name4';
        $data['pageTitle'] = 'Name 4';
        $this->view('name4/index', $data);
        break;
    default:
        $data['pageName'] = 'default';
        $data['pageTitle'] = 'Default';
        $this->view('default/index', $data);
}



if( $name = 'name1' ) { 
    $data['pageName'] = 'name1';
    $data['pageTitle'] = 'Name 1';
    $this->view('name1/index', $data);
} else if( $name = 'name2' ) { 
    $data['pageName'] = 'name2';
    $data['pageTitle'] = 'Name 2';
    $this->view('name2/index', $data);
} else if( $name = 'name3' ) { 
    $data['pageName'] = 'name3';
    $data['pageTitle'] = 'Name 3';
    $this->view('name3/index', $data);
} else if( $name = 'name4' ) { 
    $data['pageName'] = 'name4';
    $data['pageTitle'] = 'Name 4';
    $this->view('name4/index', $data);
} else {
    $data['pageName'] = 'default';
    $data['pageTitle'] = 'default';
    $this->view('default/index', $data);
}
user1842842
  • 95
  • 1
  • 2
  • 14
  • I use the switch when I have multiple elseif, only for a better readability. I'll let the others say if there is any performance gain – Ebpo Jan 15 '15 at 15:49
  • 2
    Neither. Your code structure and repetition call for an array map. – mario Jan 15 '15 at 15:49

2 Answers2

5

You are repeating yourself a lot, instead you can use an array, isset and a single if statement:

$names = [
           'name1'   => 'Name 1',
           'name2'   => 'Name 2',
           'name3'   => 'Name 3',
           'name4'   => 'Name 4',
           'default' => 'default'
];

$name = isset($names[$name]) ? $name : 'default';

$data['pageName'] = $name;
$data['pageTitle'] = $names[$name];

$this->view($name . '/index', $data);
Steve
  • 20,703
  • 5
  • 41
  • 67
0

I definitely agree with Steve's suggestion above, but if the code was just for example, it doesn't really matter if you use if/else or switch/case. It's all a matter of preference. Here's another question asked that goes into details about performance: Performance: if else vs switch, while vs for, for each vs for, print vs printf

Community
  • 1
  • 1
cyram
  • 820
  • 8
  • 22