2010-12-01 7 views
3

Я пытаюсь оптимизировать следующий оператор PHP If/Else. Могу ли я переписать код для использования в case и switch, или я должен оставить его как есть, или что?Оптимизация инструкции PHP If/Else

Код:

if(empty($_GET['id'])){ 
    include('pages/home.php'); 
}elseif ($_GET['id'] === '13') { 
    include('pages/servicestatus.php'); 
}elseif(!empty($_GET['id'])){ 
    $rawdata = fetch_article($db->real_escape_string($_GET['id'])); 
    if(!$rawdata){ 
     $title = ""; 
     $meta['keywords'] = ""; 
     $meta['description'] = ""; 
    }else{ 
     $title = stripslashes($rawdata['title']); 
     $meta['keywords'] = stripslashes($rawdata['htmlkeywords']); 
     $meta['description'] = stripslashes($rawdata['htmldesc']); 
     $subs = stripslashes($rawdata['subs']); 
     $pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>"; 
    } 
    include("includes/header.php"); 
    echo $pagecontent; 
    if(!$rawdata){ 
     error_404(); 
    } 
} 

Благодаря

ответ

2

Я ненавижу высказывания оператора switch, но его личное предпочтение быть честным. Что касается дальнейшей оптимизации, я бы предложил взглянуть на какой-то язык ассемблера. Это даст вам общее представление о том, как сделать условные утверждения более эффективными. То есть, это даст вам другой взгляд на вещи.

if(!empty($_GET['id'])) 
    { 

    if($_GET['id'] == '13') 
    { 
     include('pages/servicestatus.php'); 
    } 
    else 
    { 
     $rawdata = fetch_article($db->real_escape_string($_GET['id'])); 

     if (!$rawdata) { 

      $title = ""; 
      $meta['keywords'] = ""; 
      $meta['description'] = ""; 
     } else { 

      $title = stripslashes($rawdata['title']); 
      $meta['keywords'] = stripslashes($rawdata['htmlkeywords']); 
      $meta['description'] = stripslashes($rawdata['htmldesc']); 
      $subs = stripslashes($rawdata['subs']); 
      $pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>"; 
     } 

     include("includes/header.php"); 
     echo $pagecontent; 
     if (!$rawdata) { 

      error_404(); 
     } 
    } 
} 
else 
{ 
    include('pages/home.php'); 
} 
2

Вы можете захотеть взглянуть на разбивая свой код в форму MVC; что упростит ваш код. По крайней мере, поместите последнее предложение в другой файл, возможно, он называется default.php и include. Кроме того, вы можете создать массив идентификаторов id => file/value, найти идентификатор и включить файл.

if (isset($_GET['id'])) { 
    $pages = array(
     0 => 'home.php', 
     13 => 'servicestatus.php' 
    ); 
    if (isset($pages[$_GET['id']])) { 
     include('pages/' . $pages[$_GET['id']]); 
    } else { 
     include('pages/default.php'); 
    } 
} 
+0

Насколько мне бы хотелось, код является частью системы управления контентом, а большая часть контента динамична. :( – bear 2010-12-01 20:15:52

2

Ну я не думаю, что это необходимо, чтобы перейти к выключтелю , но вы можете изменить

} elseif (!empty($_GET['id'])) { 

просто

}else{ 
2

switch был бы целесообразен, если у вас было несколько дискретных значения для $_GET['id'], которые вы проверяли.

Одно предложение, которое я могу сделать для удобочитаемости является то, что

} elseif (!empty($_GET['id'])) { 

нужно только быть

} else { 
1

Да, переключатель оценить один раз, является эффективным, чем if elseif,
и легче поддерживать с данной структурой

switch ($_GET['id']) 
{ 
    case 13: ... break; 
    case 0 : ... break; 
    default: ... break; 
} 
1

Я не знаю, если вам нужно или не должно, но здесь я бы не стал. Основная причина в том, что есть по крайней мере один оператор, можно опустить, и тогда вы будете иметь только if-elseif-else -Statement

if (empty($_GET['id'])) { /* code */ } 
elseif ($_GET['id'] === '13') { /* code */ } 
elseif (!empty($_GET['id'])) { /* code* } 

такая же, как

if (empty($_GET['id'])) { /* code */ } 
elseif ($_GET['id'] === '13') { /* code */ } 
else { /* code* } 

В блоке после что, также, дублируется заявление if(!$rawdata).

+0

Должно ли или нет? Вы всегда должны пытаться оптимизировать свой код. Вы, сэр, являются одной из основных причин «вирусов». – 2010-12-01 20:49:48

Смежные вопросы