Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 15:33   #1
(Sandr)
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию Класс гостевой

Подскажите, как в этом классе избавиться от switch'ей?

Может с помощью if'ов?

PHP код:
<?php session_start();
require_once 
"connect.php";
class 
Messages
{
        public 
$name,$mess,$date,$sel,$ins,$upd,$del,$id;
        public function 
Show()
        {
                
$obj->sel "SELECT * FROM `gb`";
                
$sel mysql_query($obj->sel);
                while(
$arr mysql_fetch_array($sel))
                {
                        echo 
$arr['name'].'<br>'.$arr['mess'].'<br><hr>';
                }
        }
 
        public function 
Add($name,$mess)
        {
                
$obj->name $name;
                
$obj->mess $mess;
                
$obj->ins "INSERT INTO `gb` (name, mess)VALUES('{$obj->name}','{$obj->mess}')";
                if(
$obj->name == NULL or $obj->mess == NULL)
                {
                        echo 
'Ошибка! Одна из переменных пуста!';
                }
                else
                {
                        
$ins mysql_query($obj->ins);
                        if(
$ins == true)
                        {
                                echo 
'Запись успешно произведена';
                        }
                        else
                        {
                                echo 
'Ошибка!';
                        }
                }
        }
 
        public function 
Del($id)
        {
                
$obj->id $id;
                
$obj->del "DELETE FROM `gb` WHERE id='{$obj->id}'";
                if(empty(
$obj->id))
                {
                        echo 
'Ошибка! Ид сообщения пуст!';
                }
                else
                {
                        
$del mysql_query($obj->del);
                        if(
$del == true)
                        {
                                echo 
'Сообщение удалено.';
                        }
                        else
                        {
                                echo 
'Ошибка! Сообщение не удалено!';
                        }
                }
        }
        
        public function 
Edit($id)
        {
                
$obj->id $id;
                
$obj->sel "SELECT * FROM `gb` WHERE `id`='{$obj->id}'";
                
$sel mysql_fetch_array(mysql_query($obj->sel));
                echo 
'<form action="" method="POST">
                        <input type="text" name="name" value="'
.$sel['name'].'"><br>
                        <input type="text" name="mess" value="'
.$sel['mess'].'"><br>
                        <input type="submit">
                        </form>'
;
        }
}
 
switch(
$_GET['a'])
{
        case 
'form':
        echo 
'<form action="?a=write" method="POST">
        <input type="text" name="name"><br>
        <input type="text" name="mess"><br>
        <input type="submit">
        </form>'
;
        exit;
        break;
        
        case 
'write':
        
$obj = new Messages;
        
$obj->Add($_POST['name'],$_POST['mess']);
        echo 
'<br><a href="/">Главная</a>';
        exit;
        break;
}
 
$obj = new Messages;
echo 
$obj->Show();
echo 
'<a href="?a=form">Добавить</a>';
?>
(Sandr) вне форума Ответить с цитированием
Старый 26.05.2011, 15:41   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Может с помощью if'ов?
именно.
А чем switch не угодил ?
ssdm вне форума Ответить с цитированием
Старый 26.05.2011, 16:26   #3
(Sandr)
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от ssdm Посмотреть сообщение
именно.
А чем switch не угодил ?
Мне один из прогаммистов сказал это: "ООП изобрели для того, чтобы избавиться от огромного количества switch-ей, по сути каждый case-блоков должен быть отдельным классом, которые наследуют от единого класса, а вы просто вызываете метод (полиморфизм - методы у них одинаковые), не заботясь что там за класс. Понятно, что тут скорее всего вам будет сложно избавиться от switch, так как вы вступаете в противоречие с моделью Интернет, которая не является объектно-ориентированной. Но стремиться нужно к тому, чтобы switch-ей в ООП коде не было."
(Sandr) вне форума Ответить с цитированием
Старый 26.05.2011, 16:41   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию


Предложите этому программисту в вашем примере убрать switch и переписать все используя полиморфизм. Интересно будет на это посмотреть.

Код:
ООП изобрели для того, чтобы избавиться от огромного количества switch-ей,
- нет, имхо это одна из причин и далеко не главная..
Цитата:
в противоречие с моделью Интернет, которая не является объектно-ориентированной.
- бред..

В общем если хотите, оставmте switch, хотя я бы предпочел if else .
ssdm вне форума Ответить с цитированием
Старый 26.05.2011, 18:00   #5
(Sandr)
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

ssdm, спасибо за ответ. Не мог бы ты ещё подсказать несколько вещей?
- Есть ли в самом классе (не в switch'е) г-код? Если есть, то можешь подсказать, как его исправить?
- Мне сказали, что желательно сделать так, чтоб одна форма могла использоваться в разных случаях? Например, как можно использовать форму, которая находится в " case 'form' " для создания и редактирования сообщения?
- как можно отделить код от вёрстки?
(Sandr) вне форума Ответить с цитированием
Старый 26.05.2011, 18:24   #6
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
как можно отделить код от вёрстки?
используй любой mvc фреймворк
Цитата:
- Мне сказали, что желательно сделать так, чтоб одна форма могла использоваться в разных случаях? Например, как можно использовать форму, которая находится в " case 'form' " для создания и редактирования сообщения?
Хранить её в темплейте ?

В общем воспользуйтесь каким нибудь фреймворком.

Цитата:
- Есть ли в самом классе (не в switch'е) г-код? Если есть, то можешь подсказать, как его исправить?
Почитайте про sql инъекции
ssdm вне форума Ответить с цитированием
Старый 26.05.2011, 19:46   #7
(Sandr)
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от ssdm Посмотреть сообщение
используй любой mvc фреймворк

Хранить её в темплейте ?

В общем воспользуйтесь каким нибудь фреймворком.


Почитайте про sql инъекции
Что такое темплейт?
Насчёт скуль я знаю, просто решил не делать защиту, этот скрипт врятли где будет использоваться. А вот насчёт фреймворка(или шаблонизатора), то я как раз и спрашиваю про то как сделать свой простенький.. не хочу чужим чем-то ползоваться. Я просто пока что учусь, и решил осваивать ООП на примере гостевой.
(Sandr) вне форума Ответить с цитированием
Старый 27.05.2011, 13:18   #8
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Что такое темплейт?
- template (шаблон).
Если у тебя цель использовать шаблонизатор или фреймворк в будущем , то не надо изобретать велосипед ,возьми что нить готовое. Тут я тебе посоветовать ничего не смогу , так как сам пишу под Perl используя Catalyst.
Если все таки упорно хочешь писать шаблонизатор сам, то как вариант хранить html код с местами для вставки динамического контента. Что то типа
Код:
<html>
<..some content..>
[%_content_%]
<..some content..>
</html>
А потом пропускть это через регулярку заменяя [%_content_%] на нужный тебе код.
Хотя возможно это не самая лучшая идея.
ssdm вне форума Ответить с цитированием
Старый 28.05.2011, 00:14   #9
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

шблонизатор для шаблонизатора... забавно...
8oOoRPM вне форума Ответить с цитированием
Старый 28.05.2011, 00:15   #10
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

фрэймворк для гостевой... удачи...
8oOoRPM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
htmlspecialchars сгодится для защиты гостевой книги? Valio PHP 1 15.01.2011 09:59
Кто поможет связать php-код гостевой с Html ? maxwelhouse PHP 2 11.07.2008 08:36
На счет фигни в гостевой sb_centr PHP 2 11.05.2007 20:01
Проблема в Гостевой книге Tempting HTML и CSS 4 10.02.2007 00:18
Проблема с PHP скриптом, вылетает ошибка. Скрипт гостевой книги Hallo PHP 6 28.01.2007 15:27