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

Форум PHP

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

 

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

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

тема: Перевод кода из процедурного в ооп
 
 автор: naruto   (10.03.2012 в 14:28)   письмо автору
 
 

Здравствуйте, доброго дня. Реализовал систему опросов (вывод из бд, редактирование, удаление, добавление) в процедурном стиле. Все делал не разом, а разбив на подзадачи, т.е сначало вывод опроса на экран, затем голосование и т.д. Теперь задача все это сделать по принципу ООП. Опять же хочу сначала сделать грамотно для отдельной операции (тот же вывод из базы), а затем уже сделаю для всего остального. Вот например процедурный код вывода опроса для голосования из БД

    /достаем опросы                                                                                                                    
        function get_poll() {
        $query = "SELECT `id`,`name` FROM `poll` WHERE `status` = 'active'";
        $result = mysql_query($query);
        if(mysql_num_rows($result)) {
          while($row = mysql_fetch_assoc($result)) {
            $res[] = $row;
          }
        } else {
          $res = false;
        }
        return $res;
        }
         
        //выводим опросы                                                                                                                           -КОНТРОЛЛЕР
        function print_polls($poll) {                                           //$poll - массив
         if($poll === false) {
            echo  "<p>У нас нет опросов</p>";
         } else {
           foreach($poll as $row) {
             echo "<p><a href='?poll=".$row['id']."'>".$row['name']."</a></p>";
           }
         }
        }
         
        //выводим опрос ДЛЯ ДОБАВЛЕНИЯ ГОЛОСОВ                                                                          
        function print_poll($poll) {                                                                                    //$poll - id
          $query = "SELECT `id`,`name` FROM `poll` WHERE `id`=".$poll;
          $result = mysql_query($query);
          if(mysql_num_rows($result)) {
            $row = mysql_fetch_assoc($result);
            echo "<p>Опрос: ".$row['name']."</p>";
                echo "<form name='form1' method='post' action = 'vote_add.php' >";         // передача данных голосования в форму
         
            print_questions($row['id']);
                echo "<input type='submit' value='Отослать форму'>";
                echo "</form>";
          } else {
            echo "<p>А нет такого опроса!</p>";
          }
        }
         
         
         
         
        //достаем вопросы опроса
        function get_questions($poll) {
        $query = "SELECT `id`,`name`,`type`, `require` FROM `question` WHERE `poll_id` = ".$poll;
        $result = mysql_query($query);
        if(mysql_num_rows($result)) {
          while($row = mysql_fetch_assoc($result)) {
            $res[] = $row;
          }
        } else {
          $res = false;  
        }
        return $res;
        }
         
        //достаем ответы вопроса
        function get_answers($question) {
          $query = "SELECT `id`,`name`,`vote_count` FROM `answer` WHERE `question_id` = ".$question;
          $result = mysql_query($query);
          if(mysql_num_rows($result)) {
            while($row = mysql_fetch_assoc($result)) {
              $res[] = $row;
            }
          } else {
            $res = false;
          }
          return $res;
        }
         
        //выводим вопрос
         
        function print_questions($poll) {              
          $result = get_questions($poll);
          $i = 1;
          if($result === false) {
            echo "<p>Тут вопросов нет</p>";
          } else {
            foreach($result as $question) {
                        if ($question['require']== obliging){    // обязательный - необязательный вопрос
                                $str = "*";                          
                        }else {
                                $str = "";
                        }      
                                echo "<p><strong>".$i.". ".$question['name']." ".$str."</strong></p>";
                                print_answers($question['id'],$question['type']);
                                $i++;
                       
            }
          }
        }
         
        //выводим ответы
        // ДЛЯ ВЫВОДА ФОРМЫ ПРОХОЖДЕНИЯ ГОЛОСОВАНИЯ
         
        function print_answers($question,$type) {
            $answers = get_answers($question);
            if($answers === false) {
              echo "<p>Ответов не видать</p>";
            } else {
                        if($type == 'radio') {
                                foreach($answers as $answer) {
                                        echo "<p><input type='radio' name='answer_".$question."' value='".$answer['id']."' />&nbsp".$answer['name']."</p>";
                                }
                        }
                         if($type == 'chek') {
                                foreach($answers as $answer) {
                                        echo "<p><input type='checkbox' name='answer_".$question."_".$answer['id']."'  value='".$answer['id']."'/>&nbsp".$answe'name']."</p>";
                                }
                        }
            }
        }
     



Ну и далее в файле index.php например вывод списка опроса и вывод формы при нажатии на нужный опрос
PHP:
скопировать код в буфер обмена

     
    //выводим ссылки на опросы
    $poll = get_poll();
    print_polls($poll);
     
    if($poll_id=(int)$_GET['poll']) {
     
      print_poll($poll_id);
     
    }



Ну и далее в файле index.php например вывод списка опроса и вывод формы при нажатии на нужный опрос


//выводим ссылки на опросы
$poll = get_poll();
print_polls($poll);
 
if($poll_id=(int)$_GET['poll']) {
 
  print_poll($poll_id);
 
}


Как я начал было делать. Сделать три сущности - опрос, вопрос, ответ и плюс ко всему разделить каждую сущность на три класса по модели MVC- то-есть запрос в бд, обработка, вывод. Но вышел какой то бардак, + понадобилось из метода класса опроса вызывать метод класса вопроса, Как это сделать? Или объявлять методы вопроса и ответа статистическими чтобы оптом обращаться внутри методов опроса ClassName::print_answers() например? во общем что то дают разные советы, общей картины в голове нету. Прошу помощи в общей логике ну и если на конкретном данном примере сделать что то получится и станет ясна суть, остальное думаю также и до реализую. Спасибо!

  Ответить  
 
 автор: Красная_шляпа   (10.03.2012 в 17:20)   письмо автору
 
   для: naruto   (10.03.2012 в 14:28)
 

MVC это не панацея от всех бед. Для опросов особого смысла нет писать обертку для работы с базой да. У тебя все равно не будет более одного экземпляра класса, так что руководствуясь одним известным принципом советую так не делать

// А вот с базой работать удобно
$page = $db->findByField('pages', 'alias', $alias, 'title, keywords, description, html');
$db->insert('pages', $data);
$db->update('pages', $data, $id);
// delete, find & etc

  Ответить  
 
 автор: naruto   (10.03.2012 в 20:42)   письмо автору
 
   для: Красная_шляпа   (10.03.2012 в 17:20)
 

Ну вот я и спрашиваю как сделать лучше, тоесть все разбить на три класса? опрос, вопрос, ответы? Внутри них уже методы относящиеся к ударениям добавлениям и т.д?

  Ответить  
 
 автор: cheops   (10.03.2012 в 21:56)   письмо автору
 
   для: naruto   (10.03.2012 в 20:42)
 

Не переделывать вообще - получится плохо, проектировать с нуля, с прицелом повторного использования классов в нескольких проектах/приложениях. Создайте удобный язык с использованием классов, а уже при помощи этого языка создайте приложение (понятно, что должно получаться легче и удобнее, разработки приложения с нуля). Вот ООП пользу приносит где-то на таком уровне...

  Ответить  
 
 автор: naruto   (10.03.2012 в 23:12)   письмо автору
 
   для: cheops   (10.03.2012 в 21:56)
 

Суть вопроса видимо не так передал) тут сейчас не выбор - оставить процедурно или перевести в ООП, а - сделать используя парадигму ООП. А раз так надо-то вот и спрашиваю-как это сделать правильнее

  Ответить  
Rambler's Top100
вверх

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