|
|
|
| Подкажите как сделать скрипт более объектно ориентированным?
Знаю, что гостевая это не то место где можно применить ООП, но надо же с чегото начать)
<?php
require_once "connect.php";
class add
{
public $name,$mess,$ins;
function __construct($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 'Ошибка!';
}
}
}
}
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 add($_POST['name'],$_POST['mess']);
echo '<br><a href="/">Главная</a>';
exit;
break;
}
$res = mysql_query("SELECT * FROM `gb`");
while($arr = mysql_fetch_array($res))
{
echo $arr['name'].'<br>'.$arr['mess'].'<br><hr>';
}
echo '<a href="?a=form">Добавить</a>';
?>
|
| |
|
|
|
|
|
|
|
для: (Sandr)
(22.05.2011 в 22:45)
| | 1) Концепция add для класса - плохая идея, создайте лучше класс message, который моделирует одно сообщение и имеет методы для добавления, редактирования, удаления, сокрытия/отображения сообщения (причем этот класс должен с успехом применяться как в системе представления, так и в системе администрирования).
2) switch-ей, особенно в таком простом приложении быть не должно - используйте класс страницы, который в зависимости от переданного параметра вызывает тот или иной метод класса message.
3) Сообщений в гостевой книге может быть много, создайте класс постраничной навигации, причем такой, чтобы его можно было взять и использовать в любом другом приложении, ну или унаследовать от него новый класс и чуть-чуть дописать, но чтобы вся логика постраничной навигации была в базовом классе и переписывать её не приходилось бы. Этому же классу можно поручить формирование списков сообщений на странице.
4) Создайте класс моделирующий HTML-форму, причем такой, чтобы его было удобно использовать в любом приложении, где потребуется создать форму.
PS Делайте что хотите, но 70% вашего кода должна быть легко использована в любом другом приложении (не путем заимстовования, а путем объявления объектов существующих классов и вызовов статических методов). Комментарии вообще нужны очень часто, постарайтесь так сконструировать гостевую книгу, чтобы весь этот механизм можно было прикрепить к товарной позиции, статье и т.д. | |
|
|
|
|
|
|
|
для: cheops
(22.05.2011 в 23:00)
| | Спасибо за советы) Особено за первый)
Можно по подробнее насчёт 2 и 4 совета?
+++
(Не по теме конечно, но все же. Вы когда-то писали, что на сайте будет расширяться раздел по С++. Сейчас посмотрел, ничего в роде бы не поменялось, или это я плохо искал?) | |
|
|
|
|
|
|
|
для: (Sandr)
(22.05.2011 в 23:48)
| | 2) ООП изобрели для того, чтобы избавиться от огромного количества switch-ей, по сути каждый case-блоков должен быть отдельным классом, которые наследуют от единого класса, а вы просто вызываете метод (полиморфизм - методы у них одинаковые), не заботясь что там за класс. Понятно, что тут скорее всего вам будет сложно избавиться от switch, так как вы вступаете в противоречие с моделью Интернет, которая не является объектно-ориентированной. Но стремиться нужно к тому, чтобы switch-ей в ООП коде не было.
4) Подробнее эта проблематика описана в нашей книге Объектно-ориентированное программирование на PHP. Формы - это рутина, которая забирает очень много времени, хорошо бы эту задачу свести к набору небольших классов, которые удобно объявлять и которые удобно настраивать для оформления форм.
PS Не так быстро, все-таки ведущих программистов в первую очередь бросают на коммерческие проекты, все некоммерческие проекты - в свободное от работы времени, которого не очень много. | |
|
|
|
|
|
|
|
для: (Sandr)
(22.05.2011 в 22:45)
| | Вся эта лабуда с классами тут не уместна, у ООП подхода очень много недостатков(читаем критику), что касается примера, то нужно что-то вроде этого
class GuestBook {
public method addMessage () {
// ...
}
public method editMessage () {
// ...
}
public method deleteMessage () {
// ...
}
// ...
} | |
|
|
|
|
|
|
|
для: Красная_шляпа
(23.05.2011 в 06:47)
| | Переделал код. Но вот понят как избавиться от switch не могу.. Может на if'ах тогда? Подскажите, как улучшить данный код?
<?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>';
?>
|
| |
|
|
|