2015-01-29 4 views
-8

Как преобразовать нижеследующее в переключатель вместо If/Else? Я читал, что если у меня есть более чем if/elseif/else, что я должен использовать переключатель вместоПреобразование If/Else to Switch

$domain = ($_SERVER['HTTP_HOST']); 

    if ($_SERVER['HTTP_HOST']=="domain1.com" && strpos($_SERVER['REQUEST_URI'], 'ab03') !== false) { 
     codeblock(); 
     $tlink = "http://google.com"; 
    } elseif ($_SERVER['HTTP_HOST']=="domain1.com" && strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
     $tlink = "http://cnn.com"; 
} elseif ($_SERVER['HTTP_HOST']=="domain2.com" && strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
     $tlink = "http://yahoo.com"; 
} elseif ($_SERVER['HTTP_HOST']=="domain3.com" && strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
     $tlink = "http://example.com"; 
    } else { 
     $tlink = "http://cbs.com"; 
    } 
+0

'переключатель ($ _ SERVER [ 'HTTP_HOST']) {случай 'domain1.com': ... сломать; ...} ' –

+0

@ Rizier123 интересный вариант, но кто-то прокомментировал, что было бы лучше пойти с if/else .. есть ли причина y? –

+0

@JoeBobby С моей точки зрения, я также буду использовать операторы if в вашем случае, потому что их легче писать и читать, а так как PHP не создает таблицы Jump для операторов switch, вы не получаете большого повышения производительности. – Rizier123

ответ

2

Вы могли бы найти это сами в поиске 5 сек Google ...

switch($i){ 
    case 0: 
    break; 
} 

Просто заменить $ я с $_SERVER['HTTP_HOST'] для сравнения и 0 с нужным значением примера domain1.com.

http://php.net/manual/en/control-structures.switch.php

Однако switch не очень приспособлен к коду, как у вас есть несколько условий в вашем if. Поскольку второе условие, похоже, всегда одно и то же, вы можете просто поместить switch в if второго условия или использовать предложение в каждом случае, но это будет избыточным кодом.

+0

Я думаю, он знает синтаксис, хотел, чтобы кто-то помог ему настроить предложения. – Weltschmerz

+0

Затем используйте эти предложения внутри конкретного случая. Но OP говорит: «Я читал, что если у меня есть больше, чем if/elseif/else, то я должен использовать вместо этого переключатель», так что это похоже на запрос синтаксиса. –

+0

@ Mr.Smith У меня есть некоторые ключи, которые я использовал в прошлом, но часть, которую я смущаю, заставляет работать с $ _Server и strpos –

1

использование попробовать код

switch ($domain) { 
    case 'domain1.com': 
     if(strpos($_SERVER['REQUEST_URI'], 'ab03') !== false) { 
      codeblock(); 
      $tlink = "http://google.com";   
     } elseif(strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
      $tlink = "http://cnn.com"; 
     } 
    break; 
    case 'domain2.com': 
     if(strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
      $tlink = "http://yahoo.com"; 
     } 
    break; 
    case 'domain3': 
     if(strpos($_SERVER['REQUEST_URI'], 'ab05') !== false) { 
      $tlink = "http://example.com"; 
     } 
    break; 
    default: 
     $tlink = "http://cbs.com"; 
    break; 
}