Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Большая вложенность скрипта
 
 автор: NIK   (22.12.2006 в 22:06)   письмо автору
 
 

Имею в виду много опереторов выбора if. В своих скриптах их насчитывается около 10-15... Не знаю как
это сказывается на общей работе, но читаемость уменьшается. Не у кого таково не бывает?

   
 
 автор: Alph[p]a   (22.12.2006 в 22:26)   письмо автору
 
   для: NIK   (22.12.2006 в 22:06)
 

По мойму всё впорядке..if правит миром..ну можно группировать условия .. штоб if меньше было

   
 
 автор: Trianon   (22.12.2006 в 22:52)   письмо автору
 
   для: NIK   (22.12.2006 в 22:06)
 

Если 10-15 - общее число - это нормально.
Если 10-15 - глубина вложенности - впору кричать караул.

   
 
 автор: cheops   (23.12.2006 в 12:57)   письмо автору
 
   для: NIK   (22.12.2006 в 22:06)
 

Это степень вложенности (более 3-4 считается уже плохим тоном - можно обойтись без такой степени вложенности) или просто количество операторов if?

   
 
 автор: NIK   (23.12.2006 в 13:34)   письмо автору
 
   для: cheops   (23.12.2006 в 12:57)
 

приведу такой код


<?php

$form_referer 
"http://".$site_url."registration/";

if (empty(
$_POST['action'])) {
   
// форма
} else {
  
// проверка на sid и реферер
  
if ($sid != session_id() OR $_SERVER['HTTP_REFERER'] != $form_referer) {
    
// вывод ошибки
  
} else {
    
// выборка из БД
    
$query_sel mysql_query("SELECT * from users WHERE nick LIKE '$nick' OR
                                                        nick LIKE '
$eng_nick' OR
                                                        nick LIKE '
$rus_nick' OR
                                                        email = '
$email'");
    if (!
$query_sel) {
      
// если ошибка при выборке
    
} else {
      if (
mysql_num_rows($query_sel) != 1) {
        
// если запрос вернул не одну строку - ошибка
      
} else {
        
// проверка на заполение форм
        
if (empty($nick)) $errors $errors."<li style='margin-left: 15px;'> error";

        if (!empty(
$errors)) { 
          
// если допущены ошибки - выводим их
        
} else {
          
// если нет, добавляем запись в БД
          
if ($query_add) {
            
// если запрос не вернул ошибку, вызываем функцию для отправки письма ...

            
if (!empty($email_errors)) {
              
// если при отправке письма возникли ошибки - выводим их
            
} else {
              
// выводим сообщение что всё ок
            
}
          } else {
            
// это ошибка при запросе к БД
          
}
        }
      }
    }
  }
}

?>

   
 
 автор: cheops   (23.12.2006 в 14:07)   письмо автору
 
   для: NIK   (23.12.2006 в 13:34)
 

Обычно конструкцию "разворачивают", например, конструкцию
<?php
if (empty($_POST['action'])) { 
   
// форма 
} else {
  
// обработчик
}
?>

можно преобразовать следующим образом
<?php
if (!empty($_POST['action'])) { 
  
// обработчик
  
exit();
}
// форма 
?>

Тоже самое с
<?php
    
if (!$query_sel) { 
      
// если ошибка при выборке 
    
} else { 
      
// дальнейшие действия
    
}
?>

можно заменить на
<?php
    
if (!$query_sel) { 
      
// если ошибка при выборке 
      
exit();
    }
    
// дальнейшие действия
?>

   
 
 автор: NIK   (23.12.2006 в 15:44)   письмо автору
 
   для: cheops   (23.12.2006 в 14:07)
 

понятно. Я так понял что кроме плохой читаемости и "плохого тона" это ничем не грозит, верно?

   
 
 автор: cheops   (24.12.2006 в 13:31)   письмо автору
 
   для: NIK   (23.12.2006 в 15:44)
 

Теоретически нет, но на практике в таком коде возникает больше ошибок и его сложнее сопровождать.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования