[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужны советы по классу
Dingo
хочу проконсультироваться правильно ли я делаю, вот класс, писал я его чтобы снизить повторяемость кода

<?php
if (PROTECT != 1) die;
if ($_SESSION['admin'])
{
class archive_content
{
public function __construct($get)
{
$this->get = $get;
}
public function putparam($array = null)
{
is_array($array) ? $this->param = $array : die ('None Array');
if ($this->param['type'] == 'listrec') $this->listrec();
else if ($this->param['type'] == 'delrec') $this->delrec();
}
private function listrec ()
{
form("open");
html ($this->param['name']);
$result = gl_mysql_page ("get",$this->param['sql'],$this->param['recsheet'],
$this->get[$this->param['level']]);
if (mysql_num_rows($result)>0)
{
html("<table cellspacing='3px'>");
while ($row = mysql_fetch_assoc($result))
{
html ("<tr><td>");
form ("input",array ("type"=>'checkbox',"name"=>'arr[]',"value"=>$row['id']));
html ("</td>");
foreach ($this->param['getparam'] as $key) html ("<td>".$row[$key]."</td>");
html ("<td><a href='".href(THIS,$this->param['level']-1,"edit",$row['id'])."'>".icon("edit",20)."</a></td>");
html ("</tr>");
}
html("</table>");
}
else
{
if (intval($this->get[$this->param['level']])<2)
form("label",icon("info".' Cоздавай разделы "Животное" biggrin.gif'));
else
die(header("location:".href(THIS,$this->param['level']-1)));
}
if ($page = gl_mysql_page("draw",$this->param['level']-1))
{
html("<br>Страницы: ".$page);
html ("  Выбрать все на этой странице<input type='checkbox'
onChange='for(i in this.form.elements)this.form.elements[i].checked = this.checked'>"
);
form ("label");
}
form ("input", array("type"=>'submit',"name"=>'qq',"value"=>'Удалить'));
html ("или <a href='".href(THIS,$this->param['level']-1,"add")."'>Добавить".icon("add",16)."</a>");
form ("close");
}

private function delrec()
{
if (is_array($this->param['array']))
{
foreach ($this->param['array'] as $value)
{
$value = mysql_escape_string($value);
$condition = true;
if ($this->param['condition'])
{
$result = mysql_query($this->param['condition']." '".$value."'");
$condition = (mysql_result($result,0)==0) ? true : false;
print_r(mysql_fetch_assoc($result));
}
if ($condition)
mysql_query($this->param['true']." '".$value."'");
}
die(header("location:".href(THIS)));
}
}
}
}

else
html(error(403));
?>


Вот пример использования

 
$archive = new archive_content($GET);
switch ($GET[3])
{
case 'sheet':
{
$archive->putparam(array(
"name" => '<b>Редактирование контента</b>',
"sql" =>
"SELECT cont.id, cont.name, cat.name AS category
FROM `archive_content` AS cont
LEFT JOIN `archive_category` AS cat ON cat.id = cont.idcategory ORDER BY cont.id DESC"
,
"recsheet" => 20,
"level" => 4,
"getparam" => array ("category","name"),
"type" => "listrec" ));
if ($_POST)
{
if ($_POST['arr'])
{
$archive->putparam(array(
"array" => $_POST['arr'],
"type" => "delrec",
"true" => "DELETE FROM `archive_content` WHERE `id`="));
}
}


Первый вопрос, правильно ли передавать так параметры в класс, второй, что скажите о структуре.



Спустя 8 минут, 59 секунд (20.08.2010 - 22:48) Lenarfate написал(а):
если честно, это не ооп, это говнокод

Спустя 1 минута, 17 секунд (20.08.2010 - 22:49) Dingo написал(а):
Lenarfate почему вы так считаете? Потому что он не расписан на 10 страниц?? Или нет комментариев?? Обоснуйте, не будьте баснословны.

Спустя 46 минут, 9 секунд (20.08.2010 - 23:35) Lenarfate написал(а):
а ты видел когдп нибудь подобное на C++ или java?
извини,это не программирование.
хотя бы тут почитай http://php.su/learnphp/phpoo/

Спустя 9 минут, 51 секунда (20.08.2010 - 23:45) Dingo написал(а):
Lenarfate ты мне скажи что и как оформить а не тыкай на статьи которые я уже давно прочитал.

Спустя 36 минут, 7 секунд (21.08.2010 - 00:21) Guest написал(а):
Цитата (Dingo @ 20.08.2010 - 19:39)
правильно ли передавать так параметры в класс

Зависит от ситуации. В вашем случае на мой взгляд - не правильно, хотя спорно.

Спустя 16 минут (21.08.2010 - 00:37) Guest написал(а):
Цитата (Dingo @ 20.08.2010 - 19:39)
что скажите о структуре

уже сказано выше. Я лишь подтверждаю - структура ни к черту - факт.
В чем это выражается?
Да хотя бы в использовании if() и switch() там где лучше использовать одно вы используете другое и т.п
Кароче, г-на в коде разбирать на пару уроков.... Врядли кто-то этим будет заниматся, но если найдется такой чел, я ему лично отвешу виртуальный поклон.

Спустя 21 минута, 44 секунды (21.08.2010 - 00:59) Dingo написал(а):
А по существу......

Спустя 3 часа, 43 минуты, 25 секунд (21.08.2010 - 04:42) Guest написал(а):
Dingo
код кривой, не эффективный, не рабочий. Вам бы для начала научится правильно ставить задачи, правильно пользоваться операторами, а только потом ООП

Спустя 4 часа, 3 минуты, 40 секунд (21.08.2010 - 08:46) mad/crs написал(а):
Dingo необращайте внимания - "профи" везде много, и все они жуть какие умные когда чужой код обосрать.

Передавать данные в объект при создании как-то всётаки не очень хорошо.
место:

if ($this->param['type'] == 'listrec') $this->listrec();
else if ($this->param['type'] == 'delrec') $this->delrec();

здесь лучше наверное switch (по совету профи, выше smile.gif )

все эти варианты с form(...), html(...) в принципе не очень то и нужны.. по крайней мере чем они лучше за ob_start()`еной эхи?! Да и если всё что вам надо это просто по сто раз неперепечатывать код так оформите это всё в функцию - зачем это "модное" ООП, по крайней мере в вашем случае?
ну или если совсем никак без классов, или хочется "спрятать" функции чтобы была уверенность незатереть потом какой-другой, создайте класс abstract (для надёжности) с методами(вашими функциями) и пользуйтесь на здоровье:
class archive {
.....
public static function sayHi() {
echo 'Hi';
}
}


archive::sayHi();


P.S. по поводу ООП... IRBIS хорошая команда - неспорю, много интересново прочитал. Но что-то создаётся впечатление что некоторые из IRBIS только фразе "это говнокод" и научились... Противно читать - нечитай.

Спустя 1 час, 39 минут, 38 секунд (21.08.2010 - 10:26) sergeiss написал(а):
Цитата (Lenarfate @ 20.08.2010 - 23:48)
если честно, это не ооп, это говнокод

Не совсем корректное утверждение. Даже если это и верно smile.gif, то всё равно в 2-х словах надо бы указать, почему именно. Иначе, как было верно замечено, утверждение выглядит несколько снобистски.

Автору темы (в детали кода я вникать не собираюсь, если честно говорить): для начала - какой смысл делать функции, у которых нету параметров? При этом эти функции даже не используют никакие переменные класса. По той причине, в частности, что их просто нету.

Класс - это более сложный объект. Обычно это набор переменных и функций, объединенных логически для какой-то задачи. А в твоем случае это не так. Поэтому к ООП твой код и не имеет никакого отношения.

Если очень хочется что-то автоматизировать, то просто сделай функции. Да и то с оговоркой, что параметры для них надо передавать какие-то. Иначе получается то ли "г-но код", то ли просто набор букв.

PPS. Вот решил добавить немного пояснений, что понятнее было smile.gif

Представь, что у тебя задача - сходить за пивом в соседний магазинчик. До магазина - 300 метров от твоего дома. Пешком дойти недолго smile.gif Но ты выходишь из дома, заводишь машину... А она не заводится... А на улице - минус 33 градуса... Ты идешь домой, заходишь на подходящий форум и спрашиваешь: "Пацаны, а как мне машину завести в такой мороз? Пиво хочу, доехать за ним не могу. Да и чё за фигня - в вашем мануале битая ссылка на то, как правильно ключ зажигания поворачивать."

Спустя 3 минуты, 9 секунд (21.08.2010 - 10:29) Lenarfate написал(а):
Цитата
.S. по поводу ООП... IRBIS хорошая команда - неспорю, много интересново прочитал. Но что-то создаётся впечатление что некоторые из IRBIS только фразе "это говнокод" и научились... Противно читать - нечитай.

вы, милый друг, для начала русский язык выучите smile.gif

sergeiss
тс спросил, правильно ли он делает, я сказал, что нет

Спустя 1 час, 10 минут, 52 секунды (21.08.2010 - 11:40) Dingo написал(а):
sergeiss код я писал чтобы сократить повторяющиеся код в трех файлах, а именно там были однотипные действия по удалению и выводу записей из БД. Как не как, если посмотреть с точки зрения реальных объектов у меня есть свойства они передаются через массив $this->param, у объекта есть несколько методов например вывод записей и удаление, записей как я раньше упомянул. Я описал объект и использую его в трех различных ситуация меняя только свойства и выбирая метод который будет к нему применен, разве это не есть ООП.

Что касается функции form,href,$GET,ql_mysql_page,и других то это вообще-то функции фреймворка написанного без ООП, который имеет шаблонизатор.

Спустя 8 минут, 26 секунд (21.08.2010 - 11:48) Dingo написал(а):
Цитата
а и если всё что вам надо это просто по сто раз неперепечатывать код так оформите это всё в функцию - зачем это "модное" ООП, по крайней мере в вашем случае?

тут вы ошибаетесь, я полностью разделяю позицию твина в этом вопросе.ООП в PHP не нужно, но вот классы вещь дельная, конечно я без проблем могу все запихнуть в функцию, но будут заморочки с областью видимости - статические переменные, константы и тому подобное. Класс я использую лишь для того что мне не придется думать о вещах которые будут меня доканывать при составлении функции. Я не стремлюсь за модой писать в ООП, а паттерны я вообще не ненавижу.

Спустя 6 минут, 1 секунда (21.08.2010 - 11:54) sergeiss написал(а):
Dingo - о каких свойствах ты говоришь? Ты там что-то используешь, но при этом не описал ни одного свойства в явном виде! А это - прямой путь к ошибкам. Потому что имеешь ненулевой шанс обратиться к необъявленному свойству (переменной).

Спустя 6 минут, 53 секунды (21.08.2010 - 12:01) Dezigo написал(а):
if (PROTECT != 1) die;
if ($_SESSION['admin'])
{
class archive_content

не когда так не пиши. (класс тут не причём - ставь проверки когда создаёшь объект)

далее -
html ("<tr><td>");

чем тебе не устраивает - ?
$table  = null;
$table .= "";

return $table;

по сути ты понемаешь синтаксис, позаботься о структуре.
я не вижу модели -(ты всё впихнул в одну функцию)
вызов объекта жесть..(целую поему впихнул со sql) ohmy.gif
пиши коментарии.

практикуйся и всё получится.



Спустя 5 минут, 32 секунды (21.08.2010 - 12:07) Dingo написал(а):
Цитата
я не вижу модели -(ты всё впихнул в одну функцию)

вот они слова которые нужно было сказать, я и сам уже до этого начал доходить, но смысл в том если я буду расписывать полную модель, то получится столько же строк кода сколько было до применение этого кода, а их была, да страсти как много wink.gif
sergeiss
как может судить код тот человек, который написал что он не вникал в работу класса.

if (PROTECT != 1) die;
if ($_SESSION['admin'])
{
class archive_content




  • проверка от инклюда


  • проверка авторизован ли админ


  • класс



что не так, использована теория быстрого кода, если нет полномочий не будет и дальше выполнен код. Тут я не понимаю о чем вы.
Цитата

пиши коментарии.

Не могу я писать комментарии, читать код я не могу с ними sad.gif

Спустя 15 минут, 56 секунд (21.08.2010 - 12:23) sergeiss написал(а):
Цитата (Dingo @ 21.08.2010 - 13:07)
как может судить код тот человек, который написал что он не вникал в работу класса.

Очень просто smile.gif
Вот соберешься ты покупать машину. И какая тебе разница, что там движок идеально работает, если кузов весь побитый? Ты что, будешь вникать в работу двигателя или пойдешь смотреть другую машину?

Вот и я тоже (и не только я, судя по отзывам), не стал вникать в работу класса, потому что сразу же видно, что он "ржавый" снаружи.

И насчет каментов... Я не понял, почему ты не можешь читать код с каментами?

Спустя 10 минут, 57 секунд (21.08.2010 - 12:34) Dingo написал(а):
Цитата (sergeiss @ 21.08.2010 - 09:23)

И насчет каментов... Я не понял, почему ты не можешь читать код с каментами?

я не знаю, они мне мешают из-за этого я путаюсь, короче там целая история, даже приходится иногда удалять все комментарии, чтобы прочитать код

Спустя 4 минуты, 34 секунды (21.08.2010 - 12:38) Dezigo написал(а):
# проверка от инклюда
# проверка авторизован ли админ
# класс


класс он не зависем - а у тебя получается на оборот.
пиши тогда проверки в construktore.

Спустя 1 минута, 38 секунд (21.08.2010 - 12:40) Dezigo написал(а):
Dingo - когда по 5000 строк,без комментов не обоётись.

Спустя 1 минута, 31 секунда (21.08.2010 - 12:41) Dingo написал(а):
Dezigo ну я пока с такими сорцами еще не работал laugh.gif

Спустя 9 часов, 48 минут, 17 секунд (21.08.2010 - 22:30) Guest написал(а):
Ребятаааааа php не нуждается в ООП нуждаются большие и довольно сложные системы для простоты проектировки и распределения кода и всё остальное тянущееся за ним поддержку, расширения, обновления, рефакторинга и т.д.
Хватит разводить холивар на тему ООП для PHP.
ООП в первую очередь средство проектирования и создания архитектуры системы!!! а затем его создание в жизнь на какой ни будь платформе языка.
PHP оказался самым используемым на серверах так что теперь для сложных систем использовать офигенные куски кода с тяжёлым пониманием ОСОБЕННО ДЛЯ РАЗРАБОТЧИКОВ РАСПРЕДЕЛЁННЫХ КОМАНД что сейчас очень развилось.

Спустя 3 минуты, 21 секунда (21.08.2010 - 22:33) Guest написал(а):
По теме поста, класс - ЭТО ШАБЛОН ОБЪЕКТА (ЭКЗЕМПЛЯРА).
Не оперируют картинками (шаблонами) условиями.
Неужели Вы стоите на кухне и думаете : "Съесть ли мне эту колбасу на картинке или нет?".
С ув. Greg1978

Спустя 11 часов, 35 минут, 17 секунд (22.08.2010 - 10:08) mad/crs написал(а):
Цитата
вы, милый друг, для начала русский язык выучите

А при чём тут мои знания руссково языка? smile.gif

Цитата
но будут заморочки с областью видимости - статические переменные, константы и тому подобное. Класс я использую лишь для того что мне не придется думать о вещах которые будут меня доканывать при составлении функции.

я не о том что забейте на все и пишите ИСКЛЮЧИТЕЛЬНО функциями. просто зачем "создавать объект" класса если это будет единственный объект? кажется неразумным так транжирить ресурсы. И я говорил про вариант $obj = new Object(); $obj->calculate()... проще же если "объект" всево один Object::calculate() - можно убить двух зайцев, "функции" не умрут и переменные используйте свои на здоровье. но это моё субъективное мнение.

Спустя 30 минут, 4 секунды (22.08.2010 - 10:38) linker написал(а):
Ну ты оригинал:
<?php
if (PROTECT != 1) die;
if ($_SESSION['admin'])
{
class archive_content {}
}
Хотя бы класс в отдельный файл и инклудить по условию. Открыть методы, нафига лишние качели с параметрами и прочее. Очень много нужно оптимизировать.

Спустя 6 часов, 19 минут, 56 секунд (22.08.2010 - 16:58) Dingo написал(а):
linker чтожжжжж понятноссс
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.